批处理脚本提供唯一的时间戳来重命名批量文件

时间:2021-01-29 20:50:38

标签: date time batch-rename

我使用此脚本在批处理文件中使用唯一时间戳批量重命名文件。这个想法是使用秒和毫秒来创建一个唯一的数字,并将其添加到文件名中。为什么?所使用的文件名在命名约定中非常相似,以至于在将程序导入数据库时​​会触发错误。不会触发错误的是文件名的唯一性,这就是为什么我想到了前缀的第二个和毫秒标记。现在,代码按预期工作,但图章不是唯一的。就好像代码从系统中提取值并应用于文件夹中的所有文件,而不是一次一个文件。

假设我的文件名是这样的:

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 个文件,因此我们将不胜感激!

提前致谢!

1 个答案:

答案 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 毫秒。

相关问题