使用 Windows 批处理将日期时间戳添加到复制的文件

使用 Windows 批处理将日期时间戳添加到复制的文件

我以为这会很简单但它似乎比我想象的更具挑战性。

我想要复制并粘贴一个文件并附加时间戳。我使用以下代码获取时间戳:

set hournum=%time:~0,2%

if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)

Set FileAffected=%1
echo %FileAffected:~0,-1%%timeback%

这将使文件FILE.TXT成为FILE.TXT_2015-03-05_11h56m32s

但我显然希望如此FILE_20150305_11h56m32s.TXT

文件扩展名可以是任意扩展名或任意长度。感谢您的帮助。

编辑:FileAffected 是带着引号传递的,所以我只是用 ~0,-1 去掉了它们。

我确实发现如果我这样做:

FOR /f %%i IN (%FileAffected%) DO (
ECHO filename=%%~fi
ECHO fileextension=%%~xi
)

如果我回显 FileAffected,我会得到带空格的完整路径名。但是如果我使用 FOR /F 命令,文件名会截断空格后的任何内容。即使在“IN”命令中为“%FileAffected”变量添加额外的引号,仍然无法解决问题,在 fi 或 xi 周围添加引号也无法解决问题。

答案1

如何将日期和时间作为后缀添加到文件名?

使用以下批处理文件:

@echo off
set hournum=%time:~0,2%
if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)
echo %~n1%timeback%%~x1

输出:

F:\test>test file.txt
file_3/01_18h07m40s.txt

例如,如果您的文件名包含空格,file with space.txt那么您需要称呼批处理文件的"文件名以 s 开头,如下所示:

F:\test>test "file with space.txt"
file with space_3/01_18h07m56s.txt

参数扩展

%~n1将 %1 扩展为不带文件扩展名的文件名 C:\utils\MyFile,或者如果仅存在路径(没有尾随反斜杠) - 则为该路径中的最后一个文件夹。

%~x1将 %1 扩展为仅文件扩展名 - .txt

来源命令行参数(参数)


使用“双引号

如果单个参数包含空格,您仍然可以通过用“引号”括起来将其作为一个项目传递 - 这对于长文件名很有效。

如果使用参数来提供这样的文件名:

MyBatch.cmd "C:\Program Files\My Data File.txt"

该参数将是:

%0 = 我的批次

%1 = “C:\Program Files\我的数据文件.txt”

来源语法:转义符、分隔符和引号


进一步阅读

相关内容