更新:现在是2016年,除非有确实令人信服的向后兼容原因,否则我将使用PowerShell,特别是由于使用date
引起的区域设置问题。参见@npocmaka的https://stackoverflow.com/a/19799236/8479
Windows命令行语句是什么,我可以用可以放入文件名的格式来获取当前日期时间?
我想要一个.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。我不想安装其他工具来实现此目的(尽管我知道有些工具可以很好地格式化日期)。
最佳答案
参见Windows Batch File (.bat) to get current date in MMDDYYYY format:
@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)
如果您希望日期与地区日/月顺序无关,则可以使用“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%]