DOS批处理:批量改文件名,去掉最后一个下划线之后的编号

2024-11-26 20:06:17
推荐回答(2个)
回答1:

@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir /a-d /b *.*') do (
set a=%%~ni
set b=%%~xi
set a=!a:~0,8!
ren %%i !a!.!b!
)
存为bat,放在该文件夹下运行即可,只改当前文件夹里所有文件的名称,子目录里的不会改

回答2:

罐头梨子的答案弊端就在于如果D后边数字大于9,那么截取的位置将发生变化,导致重命名失败.

以下代码可以解决,以"_"为分隔,更精确一些。

@echo off&setlocal enabledelayedexpansion
for /r %%a in (*.txt) do (
    set "fn=%%~nxa"
    set "ff=%%~xa"
    for /f "tokens=1-5 delims=_" %%a in ("!fn!") do (
        set "newfn=%%a_%%b_%%c_%%d"
    ) 
    ren "!fn!" "!newfn!!ff!"
)