批处理:批量替换文件或者文件夹指定的字符串

案例:如文件1-a.txt,2-a.txt,...,可以指定去掉-a,这里的同理,文件夹也是...
可以替换,也可以直接去掉...

将bat文件放在文件夹(含有要修改的文件、文件夹)中。
这个代码的作用是删除,如果要替换,将这一句
Set b=!a:-a=!
修改成
Set b=!a:-a=替换!

@echo off&SetLocal EnableDelayedExpansion
For /f "delims=" %%i in ('dir /b') do (
Set a=%%i
Set b=!a:-a=!
ren "!a!" "!b!" )
pause追问

我上面的-a只是一个例子,有可能是任何字符的,您的方法估计可以实现,但能否更加通用?比如,我自己去定义要删除或要替换的字符,定义一个参数:原字符,再定义一个参数:新字符,如果为空就是相当于删除了…

追答

@echo off&SetLocal EnableDelayedExpansion
set /p old=输入原字符:
Set /p new=输入新字符:
For /f "delims=" %%i in ('dir /b') do (
Set a=%%i
Set b=!a:%old%=%new%!
ren "!a!" "!b!" )
pause

追问

很好,很强大!要是对子目录呢?

追答

@echo off&SetLocal EnableDelayedExpansion
set /p old=输入原字符:
Set /p new=输入新字符:
::先处理文件
For /f "delims=" %%i in ('dir /s /b /a-d') do (
Set a=%%~nxi
Set b=!a:%old%=%new%!
ren "%%i" "!b!" )
::再处理文件夹
For /f "delims=" %%i in ('dir /s /b /ad^|sort /+10000') do (
Set a=%%~ni
Set b=!a:%old%=%new%!
ren "%%i" "!b!" )
pause

追问

授人以鱼,我想要渔!要是我会了,就不用再问:先处理一个目录下所有子目录里的文件,然后再处理所有子目录…您回答很好!结贴!…

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答