[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [讨论]在变量延迟情况下用批处理替换文件名中的字符时出现"!解决

本帖最后由 huzhiqiang91 于 2013-7-3 18:36 编辑

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

变量延迟 适时开启,适时关闭 即可
http://www.bathome.net/viewthread.php?tid=4580

TOP

返回列表