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

ram*_*nan 9 batch-file

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

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

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

echo %dt%
Run Code Online (Sandbox Code Playgroud)

然后我使用copy命令如下:

copy result_accnum.txt C:\ramki_windows\batch_practise\Query_stored\result_accnum_%dt%.txt
Run Code Online (Sandbox Code Playgroud)

但没什么用.我收到错误,因为"文件名,目录名或卷标语法不正确.".

lur*_*ker 14

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

set dt=%date:~7,2%-%date:~4,2%-%date:~10,4%_%time:~0,2%_%time:~3,2%_%time:~6,2%
Run Code Online (Sandbox Code Playgroud)

请注意,上午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%
Run Code Online (Sandbox Code Playgroud)

  • 在第二个示例中,我在 %hh% 后面得到了一个尾随空格,这对于文件名来说很不方便。为了克服这个问题,我使用 set dt=%dt: =% (2认同)

小智 5

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

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

24042015_19_10_12
Run Code Online (Sandbox Code Playgroud)

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


怎么运行的?

for命令通过%date %%time%组成的字符串%date%% time%为您提供cmd(系统变量)中的日期时间值。标记指定您要基于定界符选择的元素。分隔符指定要考虑的新元素,例如/:。在这里 也是“”(空格)是一个定界符(您可以看到我在/之后留下了一个)


希望对您有所帮助!:)