首页 > 解决方案 > 如何使用批处理文件将文件重命名为增量顺序?

问题描述

我有多个文件:

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

标签: batch-file

解决方案


这是我现在有时间的最佳解决方案:

@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。

上面的输出只是echoren 的输出,所以 removeecho来实际执行 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
  )
 )

这将增加整个数字范围,增加整个范围,这比您需要的第一个解决方案更有意义。


推荐阅读