返回列表 发帖
本帖最后由 qixiaobin0715 于 2024-2-1 08:45 编辑

假设序号不超过5位数:
@echo off
setlocal enabledelayedexpansion
for %%i in (1 10 100 1000 10000) do if exist *_%%i.pdf set n=%%i
set /a n*=10
for /f "tokens=1* delims=_" %%i in ('dir /b /a-d *_*.pdf') do (
    set m=%%~nj
    set /a m+=n
    ren "%%i_%%j" "%%i_!m:~1!%%~xj"
)
pauseCOPY
1

评分人数

TOP

如果序号不连续也可以这样,不过要搜索2次文件,效率上稍差:
@echo off
set n=0
setlocal enabledelayedexpansion
for /f "tokens=2 delims=_" %%i in ('dir /b /a-d *_*.pdf') do (
    if %%~ni gtr !n! set n=%%~ni
)
for /l %%i in (1,1,9) do set n=!n:%%i=0!
set n=1!n!
for /f "tokens=1* delims=_" %%i in ('dir /b /a-d *_*.pdf') do (
    set m=%%~nj
    set /a m+=n
    ren "%%i_%%j" "%%i_!m:~1!%%~xj"
)
pauseCOPY
5楼代码有一处笔误,已修改。

TOP

回复 21# qd2024
前后数字都一样?不会出现“1.1 1.2 1.3...2.1 2.2...”等情况。

TOP

回复 27# ppll2030
第8行代码有时会误伤。
set str=!str:%%i=!COPY
比如文件名前面序号是1,而文件名某处也包含1,就会出现问题。不如修改为:
set str=!str:*%%i=!COPY
这样更加严谨一些。

TOP

返回列表