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