Windows XP fügte den Batch-Parametern und Befehlen eine ganze Reihe von Funktionen hinzu, die jedoch nicht so einfach zu bedienen sind. Seien Sie beim Zitieren sehr vorsichtig, da Dateien Leerzeichen enthalten können. Ich habe die Anführungszeichen um Dateinamen beibehalten, da es auf diese Weise nützlicher ist.
Der Ort, an dem mit batch begonnen werden soll, ist im Allgemeinen "help" (natürlich in einer CMD-Shell). Dann "cmd /?", "Set /?", "Für /?" und auch die Microsoft Batch-Website . Dies ist, was ich getan habe - es ist nicht vollständig, aber es werden Dateien gedruckt, die seit gestern um 7 Uhr geändert wurden. Ich kann weitere Bits hinzufügen, wenn Sie möchten. Ich bewahre das selbst auf, da ich manchmal wissen möchte, welche Dateien ich heute geändert habe!
(Editiert: Gestern ist schwieriger, als nur einen vom Tag abzuziehen! ...)
@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
Beachten Sie, dass das Echo von VBScript in einer Batchdatei fehleranfällig ist und unordentlich ist. Die bevorzugte Methode ist das Erstellen einer festen VBS-Datei, die nach Belieben aufgerufen werden kann. Eine andere Möglichkeit ist, das vbscript an das Ende der Batchdatei anzuhängen, jede Zeile mit einem Tag zu markieren, das Skript mit goto: EOF voranzubringen und findstr im Skript selbst zu verwenden, um die Strings auszuspähen (ja, es ist fies). :
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
Ja. Das ist nicht angenehm.