如何在DOS中添加文件名的日期和时间?

时间:2014-04-22 17:22:19

标签: batch-file

我想在文件名中添加日期和时间值,然后我想将该文件移动到文件夹附近。

这里我使用以下命令来捕获日期和时间:

set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%time:~,8%

echo %dt%

然后我使用如下复制命令:

copy result_accnum.txt C:\ramki_windows\batch_practise\Query_stored\result_accnum_%dt%.txt

但没有用。我收到错误,因为“文件名,目录名称或卷标语法不正确。”。

5 个答案:

答案 0 :(得分:14)

文件名中不允许冒号(:)。它保留用于在DOS路径名中分隔驱动器号等。您可以使用下划线(_)代替:

set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%time:~0,2%_%time:~3,2%_%time:~6,2%

请注意,上午10点之前没有前导零。如果这对您的文件名格式很重要,那么可以按如下方式完成:

set hh=%time:~0,2%
if "%time:~0,1%"==" " set hh=0%hh:~1,1%   

set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%hh%_%time:~3,2%_%time:~6,2%

答案 1 :(得分:3)

FOR /f "tokens=1-8 delims=:./ " %%G IN ("%date%_%time%") DO (
SET datetime=%%G%%H%%I_%%J_%%K
)

这会将其计算为date_hour_min_sec并将其存储在名为datetime的变量中。 例如

24042015_19_10_12

如果您知道如何在DOS中执行此操作,则可以使用此日期时间变量直接附加到您的文件名(其简单: set filename= sampletextfor_%datetime%.txt将为您提供sampletextfor_24042015_19_10_12.txt或任何文件。

它是如何工作的?

for命令遍历%date%%time%形成的字符串。 %date%%time%为您提供cmd(系统变量)中的日期时间值。 令牌根据分隔符指定要拾取的元素。 分隔符指定要考虑的新元素,例如/ :.在这里是delims。还" " (空格)是一个分隔符(你可以看到我在/之后留下了一个)

希望有帮助谢谢! :)

答案 2 :(得分:3)

上述潜伏者的答案是正确的,但是HH只需要前两个字符,如果小时数小于2位,你会在文件名中得到空格

set hh=%time:~0,2%
if "%time:~0,1%"==" " set hh=0%hh:~1,1%   

set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%hh:~0,2%_%time:~3,2%_%time:~6,2%

对于那些喜欢MM-dd-yyyy的人

set hh=%time:~0,2%
if "%time:~0,1%"==" " set hh=0%hh:~1,1%   

set dt=%date:~4,2%-%date:~7,2%-%date:~10,4%_%hh:~0,2%_%time:~3,2%_%time:~6,2%

答案 3 :(得分:1)

以下是适用于我的完整批处理文件。

@echo off
@SETLOCAL ENABLEDELAYEDEXPANSION

FOR /f "tokens=1-8 delims=:./ " %%G IN ("%date%_%time%") DO (
SET datetime=%%G%%H%%I_%%J_%%K
)

copy result_accnum.txt "C:\ramki_windows\batch_practise\Query_stored\result_accnum_!datetime!.txt"

创建的文件名为result_accnum_Fri0106_2017_14_54.txt

在创建基于时间戳的目录时,以下是为我工作的。

@echo off
@SETLOCAL ENABLEDELAYEDEXPANSION

FOR /f "tokens=1-8 delims=:./ " %%G IN ("%date%_%time%") DO (
SET datetime=%%G%%H%%I_%%J_%%K
)

SET dirname=C:\ramki_windows\batch_practise\Query_stored\result_accnum_!datetime!
if not exist %dirname% mkdir %dirname%

copy result_accnum.txt %dirname%\result_accnum_!datetime!.txt

答案 4 :(得分:0)

对于10:00之前的时间,文件名将具有空格,即name_11_11_2014_ 9_45.txt,复制将失败。您需要添加引号,即copy name.txt "name%dt%.txt"