文件名中的当前日期


Answers:


21

在命令提示符和批处理文件中,可以使用%date%%time%分别返回日期和时间。日期工作正常,但是返回的时间值包含冒号,在文件名中使用冒号是非法的,但是可以删除这些冒号。

使用类似:

COPY file.txt file_%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.txt

这将产生一个文件名,例如 file_172215_01062009.txt

更新:下面的注释对此命令有一些有趣的变化,并且可以避免一些潜在的问题。


3
很棒的小提示。顺便说一句,如果以相反的方式进行操作,即:“ file_20090601_172215”,则会在字母列表中以正确的顺序看到文件。

5
您还可以使用%time :: =%删除冒号。
user1686 2009年

2
我会说,一旦系统区域设置与测试脚本时不同,日期子字符串化就会中断?它甚至可以为测试用户工作,并且由于设置了不同的日期显示格式而成为脚本运行者……
Oskar Duveborn

3
当心0-9小时!CMD将小时的第一个字符设置为<SPACE>,而不是0。如果不将目标文件名用引号引起来,则上面的COPY命令将出现问题。
埃文·安德森

2
请注意,%DATE%并且支持%TIME%区域设置!这意味着在欧洲机器上,您会得到DD.MM.YYYY。啊
Pekka

14

使用%DATE%和/或%TIME环境变量,可以选择使用%name:from=to%%TIME::=%将删除所有冒号)替换文件名中不允许的字符。

理论»回声%date%
2009-06-01

理论»回声%time%
16:30:41,46

理论»回声%time :: =%
163052,17

理论»echo%time :: =,%
16,30,58,68

理论»回声备份-%date%-%time :: =-%。zip
备份-2009-06-01-16-31-18,82.zip

1
哇,永远不要知道:x = y的把戏。这太酷了。
尤金·卡兹

1
+1:=技巧,自从MS-Dos 1开始就出现在游戏中,这是我第一次看到它。如果您也可以更改多个字符,那就更好了!!:-)
shawty 18/09/17

那么,它只是加入到cmd.exe,在Windows NT的系列...如果你想进行多次修改,只是有连锁set tmp=%tmp:x=y%
user1686

%DATE%的内容(文件的数量,内容和顺序)是特定于语言环境的。
symcbean

4

无论区域设置如何,获取合适日期的唯一可靠方法是foxidrive @ /programming/11037831/filename-timestamp-in-windows-cmd-batch-script中的解决方案

@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

1

在文件名中使用%DATE%变量。

也有%TIME%变量,但是它包含文件名中不允许的字符。

这是将一行文本写入新文件的示例,其中创建的文件名称中带有日期和时间。

echo "testfile" >> backup-%DATE%.txt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.