O Windows XP adicionou muita funcionalidade a parâmetros e comandos em lote, mas eles não são tão fáceis de usar. Tenha muito cuidado com as citações, pois os arquivos podem conter espaços. Eu mantive as aspas em torno dos nomes de arquivos, pois é mais útil dessa forma.
O local para começar com lote geralmente é "help" (em um shell CMD naturalmente). Então "cmd /?", "Set /?", "For /?" e também o site em lote da Microsoft . Isso é o que eu fiz - não está completo, mas vai imprimir arquivos alterados desde ontem às 7 da manhã. Eu posso adicionar mais bits se você quiser. Eu vou manter isso sozinho, pois às vezes quero saber quais arquivos eu mudei hoje!
(Editado: Ontem é mais difícil do que simplesmente subtrair um do dia! ...)
@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
Observe que o eco do VBScript em um arquivo em lote é propenso a erros e confuso. O método preferido é criar um arquivo vbs fixo que possa ser chamado à vontade. Outra maneira é anexar o vbscript ao final do arquivo de lote, marcar cada linha com uma tag, certificar-se de preceder o script com goto: EOF e usar o findstr no próprio script para liberar as strings (sim, é desagradável) :
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
Sim. Não é agradável.