Batch file 如何使用批处理文件将文件重命名为增量顺序?
我有多个文件:Batch file 如何使用批处理文件将文件重命名为增量顺序?,batch-file,Batch File,我有多个文件: 12345678 (1).pdf 12345678 (2).pdf 12345678 (3).pdf 12345678 (4).pdf 12345678 (5).pdf 编号12345678是可变的。目前,我有代码 cd C:\folder setlocal enabledelayedexpansion for %%a in (*.pdf) do ( set f=%%a set f=!f:^(=! set f=!f:^)=! ren "%%a
12345678 (1).pdf
12345678 (2).pdf
12345678 (3).pdf
12345678 (4).pdf
12345678 (5).pdf
编号12345678
是可变的。目前,我有代码
cd C:\folder
setlocal enabledelayedexpansion
for %%a in (*.pdf) do (
set f=%%a
set f=!f:^(=!
set f=!f:^)=!
ren "%%a" "!f!"
if /i "%~1"=="/R" (
set "forOption=%~1 %2"
set "inPath="
) else (
set "forOption="
if "%~1" neq "" (set "inPath=%~1\") else set "inPath="
)
for %forOption% %%F in ("%inPath%* *") do (
if /i "%~f0" neq "%%~fF" (
set "folder=%%~dpF"
set "file=%%~nxF"
setlocal enableDelayedExpansion
echo ren "!folder!!file!" "!file: =!"
ren "!folder!!file!" "!file: =!"
endlocal
)
)
)
这会将文件名更改为以下内容
123456781.pdf
123456782.pdf
123456783.pdf
123456784.pdf
123456785.pdf
结果是使文件在先前生成的基础上递增
12345678.pdf
12345679.pdf
12345680.pdf
12345681.pdf
12345682.pdf
这是我目前有时间的最佳解决方案:
@echo off
setlocal enabledelayedexpansion
for %%i in (*.pdf) do (
for /f "tokens=1,2" %%a in ("%%i") do (
set num=%%b
set num=!num:%%~xb=!
set num=!num:^(=!
set num=!num:^)=!
set /a num=!num!-1
set "minname=%%a"
set lastchar=!minname:~-1!
set newname=!minname:~0,-1!
set /a cnt=+1
set /a fin=!lastchar!+!num!
echo ren "%%i" "!newname!!fin!%%~xi"
)
)
我的测试结果是:
ren "12345678 (1).pdf" "12345678.pdf"
ren "12345678 (2).pdf" "12345679.pdf"
ren "12345678 (3).pdf" "123456710.pdf"
....
因此,我们首先获取所有pdf
文件,如果名为12345678.pdf
的文件已经存在,我们什么也不做,然后我们用空格分割它们的名称,即实际数字后面的空格,但在左括号之前。然后我们只取最后一个字符(8),加上括号之间的数字,减去1
上面的输出仅echo
s ren输出,因此删除echo
以实际执行ren任务
编辑
在您的需求发生变化后,注释和问题(现在更容易实现)会发生变化,因为我们取整数加括号中的数字,再减去1:
@echo off
setlocal enabledelayedexpansion
for %%i in (*.pdf) do (
for /f "tokens=1,2" %%a in ("%%i") do (
set num=%%b
set num=!num:%%~xb=!
set num=!num:^(=!
set num=!num:^)=!
set /a num=!num!-1
set "minname=%%a"
set /a newname=minname+num
echo ren "%%i" !newname!%%~xi
)
)
这将增加整个数字范围,使整个范围不断扩大,这比您需要的第一个解决方案更有意义。6和7发生了什么?文件继续12345678(1)。pdf 12345678(2)。pdf 12345678(3)。pdf 12345678(4)。pdf 12345678(5).pdf 12345678(6).pdf。。。。。我希望在前面的数字基础上增加。数字12345678可以是任何数字,例如文件名的最后一个字符(exlucing extenstion)和循环中的+1。谢谢。我该怎么做?我对批处理文件不是很在行。会有
12345678.pdf
吗?谢谢你,格哈德。如果文件为1234578.pdf,则它可以正常工作。但是文件名可以是任何xxxxxx(1)。xxxxxx(2)。再次感谢您,但名称是否始终为数字?@priam我编辑了代码。它只是根据我的测试筛选出这个数字。根据您的示例,它适用于任何带括号值的数字命名pdf文件。非常感谢@Gerhard Barnard。它就像一个符咒。我有一个问题,我刚刚意识到,如果输出是例如xxx19,那么下一个是xxx110。可以打到xxx20吗?再次感谢你Gerhard@GerhardBarnard