FOR %%F IN (E:\backups\7DbBackup_local\*.bak) DO IF %%~tF == (time /t) echo %%F
這應該是打印文件名,如果他們修改日期的年/月/日等於當前的年/月/日Windows中的這個批處理命令有什麼問題?
FOR %%F IN (E:\backups\7DbBackup_local\*.bak) DO IF %%~tF == (time /t) echo %%F
這應該是打印文件名,如果他們修改日期的年/月/日等於當前的年/月/日Windows中的這個批處理命令有什麼問題?
%%~t
給你的日期和文件的時間,沿着線路的:
23/03/2011 04:27 PM
但即使這可能是特定於語言環境。
在另一方面,time /t
給你03:57 PM
和date /t
給你Wed 22/06/2011
,均未作爲匹配有用。
如果你想能夠匹配它們,你必須做一些字符串欺騙,以獲得僅從%%~t
(剝離時間)和date /t
(剝離當天名稱)的日期。
或者你可以保存自己的麻煩,忘掉那個奇怪的活動我喜歡叫CMD-體操,並使用一個體面的find
實用,無論是通過下載CygWin或使用更輕巧GnuWin32工具(搜索的findutils)。
如果必須使用cmd
,你可以用下面的啓動:
@setlocal enableextensions enabledelayedexpansion
@echo off
rem Get todays date
for /f "tokens=1,2,*" %%a in ('date /t') do set today=%%b
echo %today%
rem Process each file in turn.
for %%a IN (.\*) do call :procFile "%%a" %%~ta
endlocal
goto :eof
:procFile
if %2==%today% echo %2 %1
goto :eof
但同樣,請記住,這可能,如果你的語言環境信息的變化打破。幾年前我寫了一個腳本,繞過這些程序使用WMI來獲得更準確的信息:
for /f "skip=2 tokens=2-7 delims=," %%A in ('wmic path win32_localtime get day^,hour^,minute^,month^,second^,year^ /format:csv') do (
set /a mydate = 10000 * %%F + 100 * %%D + %%A
set /a mytime = 10000 * %%B + 100 * %%C + %%E
)
set mydate=00000000%mydate%
set mydate=%mydate:~-8%
set mytime=000000%mytime%
set mytime=%mytime:~-6%
這給你的格式YYYYMMDD
和HHMMSS
的日期和時間,但你能適應它給其他值。
正如paxdiablo指出的,在bat中使用時間是特定於語言環境的。但這不是你的問題。您的問題是,在Windows中,您無法直接與命令的結果進行比較。
如果您想知道,順便說一句,您既不能比較也不能指定也不能做其他任何事情。您需要使用FOR命令捕獲結果,將其分配給環境變量,然後使用它。
因此,您需要與%date%環境變量進行比較。這也是特定於語言環境的。 〜t和%date%都使用相同的語言環境,因此您需要在執行命令之前更改語言環境,使其符合您的需求並最終返回。
試試這個......
setlocal enabledelayedexpansion
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f >nul
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy-MM-dd" /f >nul
FOR %%F IN (E:\backups\7DbBackup_local\*.bak) DO (
set dt=%%~tF
set dt=!dt:~0,10!
if !dt!==%date% echo %%F %%~tF !dt!
)
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f >nul
如果你不關心的語言環境,你可以得到xcopy
爲你做到這一點:
xcopy E:\backups\7DbBackup_local\*.bak %tmp% /d:%date:~4,10% /l
%tmp%
是您的Temp目錄下;即使沒有複製,xcopy
也需要一個目的地。%date%
給出與date /t
相同的輸出,但不必做for
歌舞。%date:~4,10%
使用batch substrings得到日期mm/dd/yyyy
格式。/d
告訴xcopy
在給定日期或之後獲取文件更改。/l
告訴xcopy
只列出將被複制的文件。它可能應該是'%date:〜4,10%'而不是'%date:〜5,10%'(它是一個偏移量,所以它是基於0的)。 –
@Andriy;哎呀,對,你是。謝謝。 –
我需要基於for循環來壓縮文件。使用你的方法將迫使我創建另一批。 – eugeneK
它代之以什麼? – Oded
不應該使用date/t – adrianm
好吧,它只是打印DO之後的所有內容,點是我甚至不知道如何獲得IF條件的當前日期,所以我使用基本的cmd命令,這顯然不會以這種方式工作 – eugeneK