Windows XP добавила множество функций для пакетных параметров и команд, но они не так просты в использовании. Будьте очень осторожны с цитатами, так как файлы могут содержать пробелы. Я сохранил кавычки вокруг имен файлов, так как это более полезно.
Как правило, начинать с пакета - «помощь» (естественно, в оболочке CMD). Тогда "cmd /?", "Set /?", "For /?" а также пакетный веб-сайт Microsoft . Это то, что я сделал - он не завершен, но распечатает файлы, измененные со вчерашнего дня в 7 утра. Я могу добавить дополнительные биты, если хотите. Я сохраню это сам, так как иногда хочу знать, какие файлы я изменил сегодня!
(Отредактировано: вчера сложнее, чем просто вычесть одно из дня! ...)
@echo off setlocal rem Start at current directory. Customise as you wish. set my_root=. rem First get yesterday at 7am. rem The format of %DATE% depends on locale so this is a rem hack using a tmp file in VBScript... rem Note the use of the caret, which is the batch escape character echo yday = DateAdd("d", -1, Date) > "%temp%\tmp$$$.vbs" echo Wscript.Echo DatePart("yyyy",yday) ^& Right("0" ^& DatePart("m",yday), 2) ^& Right("0" ^& DatePart("d",yday), 2) >> "%temp%\tmp$$$.vbs" for /F %%a in ('cscript //nologo "%temp%\tmp$$$.vbs"') do set after_ymd=%%a if exist "%temp%\tmp$$$.vbs" del "%temp%\tmp$$$.vbs" set after_time=0700 echo Files after: %after_ymd% %after_time% for /R %my_root% %%f in (*.*) do call :checkdate "%%f" "%%~tf" goto :EOF :checkdate set fname=%1 set fdate=%2 for /f "tokens=1-5 delims=./-: " %%a in (%fdate%) do ( set f_d=%%a set f_m=%%b set f_y=%%c set f_hr=%%d set f_mn=%%e ) if %f_y%%f_m%%f_d% LSS %after_ymd% goto :EOF if %f_y%%f_m%%f_d% EQU %after_ymd% if %f_hr%%f_mn% LSS %after_time% goto :EOF REM Copy your file here... echo Newer: %fname% goto :EOF
Обратите внимание, что отображение VBScript в пакетном файле подвержено ошибкам и является грязным. Предпочтительным методом является создание фиксированного файла VBS, который можно вызывать по желанию. Другой способ - добавить vbscript в конец пакетного файла, пометить каждую строку тегом, убедиться, что перед сценарием указано goto: EOF, и использовать findstr в самом сценарии для извлечения строк (да, это неприятно) :
echo off & setlocal enableextensions rem Build a script: findstr "'VBS" "%~f0" | findstr /v "findstr" > %TEMP%\tmp$$$.vbs .... goto :EOF ' 'VBS DateAdd("d", -1, Date) 'VBS Wscript.Echo DatePart("yyyy",yday) & Right("0" & DatePart("m",yday), 2) & Right("0" & DatePart("d",yday), 2) 'VBS
Да. Мне не приятно.