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


0

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

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

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周围添加引号。

Answers:


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展开到仅限文件eXtension - .txt

命令行参数(参数)


使用“双引号

如果单个参数包含空格,您仍然可以通过“引号”包围它作为一个项目传递 - 这适用于长文件名。

如果参数用于提供如下文件名:

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

这个参数将是:

%0 = MyBatch

%1 =“C:\ Program Files \ My Data File.txt”

语法:转义字符,分隔符和引号


进一步阅读


注意:%timeback%不包括我的年份。我得到_3/01_18h31m52s我的系统,其中上%date%15/03/2015
DavidPostill

感谢您抽出宝贵时间回答。当我有机会时,我将不得不对此进行试验。很奇怪,因为我有同样的“%timeback%”变量,另一批给我一年。我要看得更深。
HTWingNut 2015年

感谢您抽出宝贵时间回答。当我有机会时,我将不得不对此进行试验。我想你的日期格式是dd / mm / yyyy,在美国,我们向后做的一切都是mm / dd / yyyy。将不得不考虑一点。i.imgur.com/WIKf6TE.jpg
HTWingNut 2015年
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.