本帖最后由 huzhiqiang91 于 2013-7-3 18:36 编辑
前几天同学有一批字幕文件需要重命名,要删去一部分字符与视频文件匹配,我自己写了个批处理,没想到文件名中都含有英文叹号"!"
无法使用变量延迟,后来研究想出了办法,代码如下:- @echo off
- title 重命名
- set /p lujing=请输入正确的文件夹(按回车处理当前文件夹及子文件夹):
- set /p leixing=请输入要处理的文件类型,示例(txt):
- set /p ming=请输入要处理的文件名,示例(as.txt则输入as或a*)
- set /p shuru=请输入要改变的字符:
- set /p shuchu=请输入改变后的字符:
- ::--------------------预处理,去除英文叹号-----------------------------------
- :prodo
- for /r %lujing% %%i in (%ming%.%leixing%) do (
- set "a=%%i"
- set "b=%%~ni"
- )
- set b=%b:!=★%
- ren "%a%" "%b%.ll"
- if errorlevel 1 goto main
- goto prodo
-
- :main
- cls
- for /r %lujing% %%i in (*.ll) do (ren %%i %%~ni.%leixing%)
-
- ::--------------------主程序-------------------------------------------------
-
- setlocal enabledelayedexpansion
- for /r %lujing% %%i in (%ming%.%leixing%) do (
- set "a=%%~nxi"
- set "a=!a:%shuru%=%shuchu%!"
- ren "%%i" "!a!"
- )
- setlocal disabledelayedexpansion
- ::--------------------后处理,还原英文叹号-----------------------------------
- :postdo
- for /r %lujing% %%i in (%ming%.%leixing%) do (
- set a=%%i
- set b=%%~ni
- )
- set "b=%b:★=!%"
- ren "%a%" "%b%.ll"
- if errorlevel 1 goto end
- goto postdo
- :end
- cls
- for /r %lujing% %%i in (*.ll) do (ren "%%i" "%%~ni.%leixing%")
复制代码 其实就是思路就是先把英文叹号替换掉,主程序完成后再还原回来,但自己觉的太麻烦,特放到这供大家讨论,希望有高手有更好办法,万分感谢(另注如果文件名中有%怎么处理?) |