更新:现在是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。我不想安装额外的实用程序来实现这一点(尽管我知道有一些工具可以很好地格式化日期)。


当前回答

我使用date.exe,并将其重命名为date_unxutils.exe以避免冲突。 把它放在批处理脚本旁边的bin文件夹中。

Code

:: Add binaries to temp path
IF EXIST bin SET PATH=%PATH%;bin

:: Create UTC Timestamp string in a custom format
:: Example: 20210128172058
set timestamp_command='date_unxutils.exe -u +"%%Y%%m%%d%%H%%M%%S"'
FOR /F %%i IN (%timestamp_command%) DO set timestamp=%%i
echo %timestamp%

Download UnxUtils

链接。

参考文献

我建立在这个很棒的答案上。

其他回答

http://sourceforge.net/projects/unxutils/files/

查看ZIP文件中的“Date.exe”,并将其重命名为“DateFormat.exe”(以避免冲突)。

把它放在你的Windows system32文件夹中。

它有很多“日期输出”选项。

如需帮助,请使用DateFormat.exe——h

我不确定如何将其输出放入环境变量中…使用设置。

"d:\Program Files\7-Zip\7z.exe" a -r code_%date:~10,4%-%date:~4,2%-%date:~7,2%.zip

给定一个已知位置,供函数形式参考。ECHOTIMESTAMP调用显示了如何将时间戳转换为变量(本例中为DTS)。

@ECHO off

CALL :ECHOTIMESTAMP
GOTO END

:TIMESTAMP
SETLOCAL  EnableDelayedExpansion
    SET DATESTAMP=!DATE:~10,4!-!DATE:~4,2!-!DATE:~7,2!
    SET TIMESTAMP=!TIME:~0,2!-!TIME:~3,2!-!TIME:~6,2!
    SET DTS=!DATESTAMP: =0!-!TIMESTAMP: =0!
ENDLOCAL & SET "%~1=%DTS%"
GOTO :EOF

:ECHOTIMESTAMP
SETLOCAL
    CALL :TIMESTAMP DTS
    ECHO %DTS%
ENDLOCAL
GOTO :EOF

:END

EXIT /b 0

并保存到文件,timestamp.bat,下面是输出:

PowerShell 试试下面的代码。 它将在24小时内创建日期为ddmmyyhhmm的文件或文件夹变量

[int] $day = Get-Date -UFormat %d
[int] $month = Get-Date -UFormat %m
[int] $year = Get-Date -UFormat %y
[String] $date = "$($day)$($month)$($year)"
$time = Get-Date -UFormat %R
$time -replace ‘[:]’,”"
$fileFolderName = $date + time

这段代码的前四行将为您提供可靠的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