Удалить файлы старше определенной даты изменения файла - PullRequest
0 голосов
/ 15 мая 2019

У меня есть папка с файлами .bak и .log.

Я хочу удалить файлы .bak старше 7 дней, но оставляю последние 4 и делаю это с пропуском forfiles.

Затем я хочу удалить все файлы .log, которые старше даты изменения последнего оставшегося файла .bak, и вот где у меня возникает проблема. Как я могу найти moddate старого файла .bak и сравнить с ним при удалении.log?

pushd "C:\temp2"
for %%X in (bak) do (
  set "skip=1"
  for /f "skip=4 delims=" %%F in ('dir /b /a-d /o-d /tw *.%%X') do (
    if defined skip forfiles /d -1 /m "%%F" >nul 2>nul && set "skip="
    if not defined skip del "%%F" 
  )
) 

for %%a in ("C:\temp2\*.bak" /O:-D ) do set FileDate=%%~ta
forfiles /P "C:\temp2\*.log" /S /D -%FileDate%  "cmd /C del @file"

1 Ответ

0 голосов
/ 17 мая 2019

Вот вам пример , который использует вместо менее эффективной команды .

@Echo Off
CD /D "C:\temp2" 2>Nul || Exit /B
If Not Exist *.bak Exit /B
Set "RO=/NS /NJS /NJH /NDL /NC"
Set "DM="
For /F "Skip=3 Tokens=1,2*" %%A In (
    'RoboCopy . $tmp *.bak /TS %RO% /MINAGE:7 /L ^| Sort /R'
) Do If Not Defined DM (Set "DM=%%A") Else Del "%%C"
If Not Exist *.log Exit /B
If Not Defined DM (For /F "Tokens=1,2*" %%A In (
    'RoboCopy . $tmp *.bak /TS %RO% /L ^| Sort /R') Do Set "DM=%%A")
If Defined DM (RoboCopy . $tmp *.log %RO% /MOV /MINAGE:%DM:/=% > Nul
    RD /S /Q $tmp 2> Nul)

Код использует затем удаляет временный каталог в исходном каталоге, C:\temp2, с именем $tmp.Если у вас, скорее всего, уже есть каталог с таким именем, вы можете изменить имя в строках 12 и 13 на что-то менее вероятное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...