Пакетное удаление файла менее чем за минуту до - PullRequest
0 голосов
/ 27 сентября 2011

Я пытаюсь удалить файлы .zip, .jpg и .txt, возраст которых меньше минуты. Я еще не добавил типы файлов. Подробнее об этом позже. Но это, кажется, ничего не удаляет на этом этапе. Любая помощь приветствуется. Это в Windows.

 @echo off
 cd "c:\*\*"
 setlocal
 call :DateToMinutes %date:~-4% %date:~-10,2% %date:~-7,2% %time:~0,2% %time:~3,2% NowMins
 for /f "delims=" %%a in ('dir * /a-d /b') do call :CheckMins "%%a" "%%~ta"
 goto :EOF
 :CheckMins
 set File=%1
 set TimeStamp=%2
 call :DateToMinutes %timestamp:~7,4% %timestamp:~1,2% %timestamp:~4,2% %timestamp:~12,2% %   timestamp:~15,2%%timestamp:~18,1% FileMins
 set /a MinsOld=%NowMins%-%FileMins%
 if %MinsOld% leq 1 del %file%
 goto :EOF
 :DateToMinutes
 setlocal
 set yy=%1&set mm=%2&set dd=%3&set hh=%4&set nn=%5
 if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
 set /a dd=100%dd%%%100,mm=100%mm%%%100
 set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
 set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
 if 1%hh% LSS 20 set hh=0%hh%
 if /i {%nn:~2,1%} EQU {p} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
 if /i {%nn:~2,1%} EQU {a} if "%hh%" EQU "12" set hh=00
 if /i {%nn:~2,1%} GEQ {a} set nn=%nn:~0,2%
 set /a hh=100%hh%%%100,nn=100%nn%%%100,j=j*1440+hh*60+nn
 endlocal&set %6=%j%&goto :EOF

1 Ответ

1 голос
/ 27 сентября 2011

Во-первых, ваш сценарий не работает для меня, потому что он зависит от формата даты и времени, а для меня это:

c:\>echo %date%
Tue 27/09/2011

 c:\>echo %time%
 9:52:31.68

Кроме этого, проанализируйте, что происходит, временно закомментировав @echo в верхней части.

Я отредактировал ваш скрипт для обработки моего формата даты, и я вижу две проблемы:

  1. Рассеянный пробел в передаче пятого параметра (хотя это может быть просто проблема вырезания и вставки); и
  2. То, как вы перебираете каталоги. Вместо использования cd "c: **" я бы изменил оператор for следующим образом:

    for / f "delims =" %% a in ('dir / a-d / b / s c: \') сделать вызов: CheckMins "%% a" "%% ~ ta"

Как сказал PA в комментариях, есть лучшие ответы по адресу: Как проверить создание метки времени для файла в пакетном скрипте Windows?

...