我有一个文件列表。每天我都会生成一个新的文件列表。我需要保留以前生成的文件列表。我想在昨天的文件末尾添加和编号,我想将所有以前的文件增加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行。
非常感谢您对此批处理文件的任何帮助。
基思
答案 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
)