更新:现在是2016年,我将使用PowerShell,除非有一个真正令人信服的向后兼容的原因,特别是因为使用日期的区域设置问题。参见@npocmaka的https://stackoverflow.com/a/19799236/8479
什么是Windows命令行语句(s),我可以使用以我可以放入文件名的格式获取当前日期时间?
我想要一个.bat文件,它将一个目录压缩成一个归档文件,其中当前日期和时间作为名称的一部分,例如Code_2008-10-14_2257.zip。有什么简单的方法可以做到这一点,独立于机器的区域设置吗?
我真的不介意日期格式,理想情况下它是yyyy-mm-dd,但任何简单的都可以。
到目前为止,我已经得到了这个,在我的机器上给我Tue_10_14_2008_230050_91:
rem Get the datetime in a format that can go in a filename.
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%
rem Now use the timestamp by in a new ZIP file name.
"d:\Program Files\7-Zip\7z.exe" a -r Code_%_my_datetime%.zip Code
我可以接受这个,但它似乎有点笨重。理想情况下,它应该更简短,并具有前面提到的格式。
我用的是Windows Server 2003和Windows XP Professional。我不想安装额外的实用程序来实现这一点(尽管我知道有一些工具可以很好地格式化日期)。
我注意到o/p并没有要求一个与区域无关的解决方案。不过,我的解决方案是针对英国的。
这是在批处理文件中使用的最简单的解决方案,一行解决方案:
FOR /F "tokens=1-3 delims=/" %%A IN ("%date%") DO (SET today=%%C-%%B-%%A)
echo %today%
可以通过改变输出语句中变量%%A %%B和%%C的顺序来改变该解决方案,以提供所需的任何日期格式(例如YY-MM-DD或DD-MM-YY)。
我发布这个答案的目的——我唯一的目的——是为了证明这可以在命令行上完成,通过使用一行代码来实现。
而且,像其他人那样发布运行35行代码的答案是多余的,因为o/p在问题中特别要求命令行解决方案。因此,o/p专门寻求单线解决方案。
这段代码的前四行将为您提供可靠的YY DD MM YYYY HH Min Sec变量,适用于Windows XP Professional和更高版本。
@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%" & set "fullstamp=%YYYY%-%MM%-%DD%_%HH%%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
查看Windows批处理文件(.bat)以MMDDYYYY格式获取当前日期:
@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
echo %mydate%_%mytime%
如果你更喜欢24小时/军事格式的时间,你可以用这个替换第二个FOR行:
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
C: \ date.bat >
2008 - 10 - 14 - _0642
如果你想要日期独立于地区日/月顺序,你可以使用“WMIC os GET LocalDateTime”作为源,因为它是ISO顺序:
@echo off
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ldt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2% %ldt:~8,2%:%ldt:~10,2%:%ldt:~12,6%
echo Local date is [%ldt%]
C: > test.cmd
本地日期为[2012-06-19 10:23:47.048]