使用批处理文件重命名文件并增加后缀

时间:2013-07-12 19:24:12

标签: batch-file rename increment

我有一个文件列表。每天我都会生成一个新的文件列表。我需要保留以前生成的文件列表。我想在昨天的文件末尾添加和编号,我想将所有以前的文件增加1,以便昨天的文件始终为0001.例如:

昨天生成的文件是:

P.xls
T.xls
W.xls

我想运行一个名为它的批处理文件:

P0001.xls
T0001.xls
W0001.xls

确定。我可以做那个部分。没什么大不了。文件总是命名为P,T和W,因此该部分很容易。更难的部分是每天重命名P0001.xls,T0001.xls和W0001.xls。我可以制作一个像这样开始的批处理文件:

rename P9998.xls P9999.xls

然后继续前进到P0001.xls,但这太荒谬了。我不想为每个文件键入10,000行。

非常感谢您对此批处理文件的任何帮助。

基思

2 个答案:

答案 0 :(得分:0)

不是迭代所有可能的数字,而是仅处理存在的文件更有效。我暂时将.ren附加到文件中作为第一步,这样我就不必担心按降序处理。

此解决方案假定所有以P W或T开头的现有.XLS文件都要重命名,并遵循正确的命名约定。它还假定要重命名的文件位于当前目录中。

@echo off
setlocal enableDelayedExpansion
for %%C in (P T W) do ren %%C*.xls *.*.ren
ren ?.xls.ren ?0000.*
for %%F in (*.xls.ren) do (
  set "num=%%F"
  set /a "num=1!num:~1,4! - 9999"
  set "num=000!num!"
  ren %%F ?!num:~-4!.xls
)

这是一个更直接但效率更低的版本,可以安全地忽略以P T或W开头且不符合命名约定的.XLS文件。在这里,我按降序对文件进行排序,这样我只需要重命名一次文件。

@echo off
setlocal enableDelayedExpansion
for /f "delims=" %%F in (
  'dir /b /a-d /o-n *.xls^|findstr /rix [PTW][0-9][0-9][0-9][0-9].xls'
) do (
  set "num=%%F"
  set /a "num=1!num:~1,4! - 9999"
  set "num=000!num!"
  ren %%F ?!num:~-4!.xls
)
for %%C in (P T W) do ren %%C.xls ?0001.*

我正在利用一些鲜为人知的REN如何处理通配符的功能。有关详细信息,请参阅How does the Windows RENAME command interpret wildcards?

答案 1 :(得分:0)

下面的批处理文件以更快的方式实现了所需的重命名,因为它处理文件编号而不是文件名,因此每个周期重命名3个文件;另外,for /L循环比具有文件名的常规for运行得更快。如果文件数量很大,速度很重要。

@echo off
setlocal EnableDelayedExpansion

rem Rename files generated yesterday
ren ?.xls ?0000.xls

rem Get the number of the last file
for /F "delims=" %%a in ('dir /B /A-D /O-N *.xls') do (
   set lastName=%%a
   goto continue
)
:continue
set /A oldNumber=1%lastName:~1,4%, newNumber=oldNumber+1, numFiles=newNumber-10000

rem Rename all files
for /L %%a in (1,1,%numFiles%) do (
   ren ?!oldNumber:~1!.xls ?!newNumber:~1!.xls
   set /A oldNumber-=1, newNumber-=1
)