Windows XP agregó una gran cantidad de funciones a los parámetros y comandos por lotes, pero no son tan fáciles de usar. Tenga mucho cuidado al citar ya que los archivos pueden contener espacios. He mantenido las citas en torno a los nombres de archivo, ya que es más útil de esa manera.
El lugar para comenzar con el proceso por lotes generalmente es "ayuda" (en un shell CMD, naturalmente). Luego "cmd /?", "Set /?", "For /?" y también el Sitio web de lotes de Microsoft . Esto es lo que he hecho: no está completo pero imprimirá los archivos modificados desde ayer a las 7 am. Puedo añadir más bits si quieres. Lo guardaré yo mismo, ya que a veces quiero saber qué archivos he cambiado hoy.
(Editado: ¡Ayer es más difícil que solo restar uno del día! ...)
@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
Tenga en cuenta que hacer eco de VBScript en un archivo por lotes es propenso a errores y está desordenado. El método preferido es crear un archivo vbs fijo que pueda llamarse a voluntad. Otra forma es agregar el vbscript al final del archivo por lotes, marcar cada línea con una etiqueta, asegurarse de preceder al script con goto: EOF y usar findstr en el propio script para grep las cadenas (sí, es desagradable) :
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
Sí. No es agradable