我使用此脚本在批处理文件中使用唯一时间戳批量重命名文件。这个想法是使用秒和毫秒来创建一个唯一的数字,并将其添加到文件名中。为什么?所使用的文件名在命名约定中非常相似,以至于在将程序导入数据库时会触发错误。不会触发错误的是文件名的唯一性,这就是为什么我想到了前缀的第二个和毫秒标记。现在,代码按预期工作,但图章不是唯一的。就好像代码从系统中提取值并应用于文件夹中的所有文件,而不是一次一个文件。
假设我的文件名是这样的:
File1.txt
File2.txt
File3.txt
File4.txt
当脚本运行时,它会像这样重命名文件:
1410File1.txt
1410File2.txt
1410File3.txt
1410File4.txt
我希望脚本会这样做:
1410File1.txt
1411File2.txt
1412File3.txt
1413File4.txt
我用来帮助我解决这个问题的代码:
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
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 Mil=%dt:~14,6%
set stamp=%Sec%%Mil%
CHDIR /D "c:\TEST\FILES\"
for %%a in (*.*) do ren "%%a" "%stamp%%%a"
是否需要额外的编程代码来确保每个文件名以不同的方式重命名?我在 Windows 10 上使用一个简单的 .bat 文件。在任何一天,我最终都会一次性重命名 600 到 1000 个文件,因此我们将不胜感激!
提前致谢!
答案 0 :(得分:0)
您回答了自己的问题:
<块引用>现在,代码按预期工作,但图章不是唯一的。就好像代码从系统中提取值并应用于文件夹中的所有文件,而不是一次一个文件。
看看你的代码。你
在运行开始时计算时间戳一次:
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
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 Mil=%dt:~14,6%
set stamp=%Sec%%Mil%
cd
下至所需目录:
CHDIR /D "c:\TEST\FILES\"
遍历目录中的文件,为每个文件添加相同的时间戳:
for %%a in (*.*) do ren "%%a" "%stamp%%%a"
您需要在最终循环的每次迭代中重新计算时间戳。
我还会在循环中添加几毫秒的暂停,以确保在时间戳计算之间至少间隔了 1 毫秒。