Пакетный файл, который удаляет файл, последней модификации которого не было сегодня - PullRequest
1 голос
/ 24 мая 2009

Я просто хочу знать:

Как я могу удалить 'log.txt', если последняя модификация была не сегодня?

С командным файлом.

Я просто говорю здесь о 1 ФАЙЛЕ!

Ответы [ 5 ]

2 голосов
/ 24 мая 2009

PowerShell должен заменить партию.

if ((dir log.txt).LastWriteTime -lt [datetime]::today) { del log.txt }
1 голос
/ 24 мая 2009

Вы можете использовать forfiles:

forfiles /D -1 /M log.txt /C "cmd /c del @file"
1 голос
/ 24 мая 2009

К сожалению, вы не можете сделать это надежным и общим способом (*).

Powershell, Cygwin, Unix Tools - отличные решения, если вы можете быть уверены, что они будут установлены на целевой машине.

Я написал небольшую служебную программу, которая берет путь с подстановочными знаками и количеством дней и удаляет все файлы, соответствующие пути, которые старше указанного количества дней. В моей среде это было удобнее, чем установка стороннего пакета.

(*) Следующее будет работать для вашего конкретного случая (дата изменения не сегодня), если формат краткой даты в ваших региональных настройках включает в себя столетие (т.е. длина 10 символов). Но это не обобщается в течение N дней, и мне не нравится полагаться на региональные настройки компьютера для такого рода вещей:

for %%i in (log.txt) do SET FILETIME=%%~ti
IF NOT "%FILETIME:~0,10%" == "%DATE%" DEL /f log.txt
0 голосов
/ 24 мая 2009

Для чего бы то ни было, вы можете использовать jscript или vbscript. Оба этих языка сценариев были установлены на платформах MS с середины 90-х годов

0 голосов
/ 24 мая 2009

Пакетная обработка делает что-то очень простое очень сложным. Если вы можете использовать Cygwin или установить Unix Tools, подумайте над тем, чтобы сделать что-то вроде этого:

find log.txt -mtime +1 -exec rm {} \;

UPDATE
Нашел что-то, что может быть полезным для вас, используя чистую партию. Вы должны иметь возможность изменить это и адаптировать его под свои нужды.

...