文件名中的当前日期

Bog*_*iev 24 windows windows-command-prompt

我已经安排了使数据库转储的备份脚本。如何将日期时间戳添加到文件名?

我说的是 Windows 和 CMD。

aal*_*aap 24

在命令提示符和批处理文件中,您可以使用%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
Run Code Online (Sandbox Code Playgroud)

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

更新:下面的评论对此命令有一些有趣的曲折以及一些可以避免的潜在问题。

  • 您还可以使用 %time::=% 删除冒号。 (6认同)
  • 很棒的小技巧。顺便说一句,如果你反其道而行之,即:“file_20090601_172215”,你将在字母列表中以正确的顺序看到文件。 (4认同)
  • 我会说,只要系统区域设置与测试脚本时不同,日期子字符串就会中断?由于设置了不同的日期显示格式,它甚至可以为测试用户工作并作为脚本运行程序中断...... (4认同)
  • 当心 0 - 9 小时!CMD 将小时的第一个字符设置为 <SPACE>,而不是 0。如果您不将目标文件名用引号括起来,上面的 COPY 命令将会出现问题。 (4认同)
  • 请注意,`%DATE%` 和 `%TIME%` 是语言环境感知的!这意味着在欧洲机器上,你会得到`DD.MM.YYYY`。啊。 (4认同)

use*_*686 20

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

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

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

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

理论 » 回声 %time::=,%
16、30、58、68

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

  • 哇,永远不知道 :x=y 技巧。这太酷了。 (3认同)
  • %DATE% 的内容(文件数、内容和顺序)是特定于语言环境的。 (2认同)

Eri*_*let 11

无论区域设置如何,获得适当日期的唯一可靠方法是来自 foxidrive @ /sf/ask/772648201/

@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
Run Code Online (Sandbox Code Playgroud)