Windows批处理:如何在文件名中添加当前日期和时间的格式(yyyymmdd.hhmmss)?

6

对于目录中的每个文件夹,使用以下命令批量压缩文件:"C:\Program Files\7-Zip\7z.exe" a -tzip "%%A.zip" -xr!.bat "%%A" -r -x!*.xls

上述批处理将自动压缩目录中的文件。在压缩时,我想以格式(YYYYMMDD.HHMMSS)附加日期和时间。 例如,假设文件夹名为“University”。如果运行批处理文件,则最终的压缩文件名应该创建为“University_YYYYMMDD.HHMMSS.zip”。


1
请注意:使用“%date%”和“%time%”的解决方案是机器/区域特定的,可能会因为在不同的机器上或者甚至在更改自己机器的区域设置时而发生变化。Wmic可以轻松地给出始终具有相同格式的变量,而一些计算后的VBS脚本也可以做到这一点。 - foxidrive
最不容易出错的解决方案是Ilya链接的 - https://dev59.com/bXM_5IYBdhLWcg3w3nRs#16349176。然而,它几乎没有被投票 :( - Serhii Kheilyk
2个回答

13

这段代码将在XP Pro及更高版本中为您提供可靠的YY DD MM YYYY HH Min Sec变量。

@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 "fullstamp=%YYYY%%MM%%DD%.%HH%%Min%%Sec%"

for /D %%A in (*) do "C:\Program Files\7-Zip\7z.exe" a -tzip "%%A_%fullstamp%.zip" -xr!.bat "%%A" -r -x!*.xls

由于WMIC是在Windows 2000中引入的,因此它也应该在那里起作用。但是,我没有一个来检查。 - Serhii Kheilyk
2
@sergiykheylyk 谢谢您的评论。值得一提的是,XP Home版中没有WMIC,并且我检查了我的W2K Pro,它默认也没有WMIC。 - foxidrive

0

这里有一个构建字符串的解决方案:

set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
echo secs=%secs%

set year=%date:~-4%
echo year=%year%
set month=%date:~3,2%
if "%month:~0,1%" == " " set month=0%month:~1,1%
echo month=%month%
set day=%date:~0,2%
if "%day:~0,1%" == " " set day=0%day:~1,1%
echo day=%day%

set datetimef=%year%%month%%day%.%hour%%min%%secs%

echo datetimef=%datetimef%

所以,您可以将变量%datetimef%与输出文件名拼接在一起:

for /D %%A in () do "C:\Program Files\7-Zip\7z.exe" a -tzip "%datetimef%_%%A.zip" -xr!.bat "%%A" -r -x!*.xls

2
这是与本地环境相关的。在某些区域设置下可能无法正常工作,例如瑞典。 - Serhii Kheilyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接