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

[文件操作] [已解决]批处理如何替换文件夹名和文件名里的指定字符或字符串

本帖最后由 pcl_test 于 2016-8-14 11:56 编辑

本人没有什么基础,就是突然喜欢上鼓捣批处理。自己胡搞瞎弄了一番。
  1. @echo off&color 3a&set c=0123456789abcdefghijklmnopqrstuvwxyz
  2. title 批量替换文件(文件夹)名
  3. echo.
  4. echo 此批处理可批量替换本文件所在文件夹下所有文件的文件名。
  5. echo.
  6. echo.&set /p strtemp1= 请输入要替换的文件(文件夹)名字符串(可替换空格):
  7. echo.&set /p strtemp2= 请输入替换后的文件(文件夹)名字符串(删除则直接回车):
  8. for /f "delims=" %%i in ('dir /s /b') do (
  9. setlocal enabledelayedexpansion
  10. set "f=%%~nxi"
  11. set "f1=!f:%strtemp1%=%strtemp2%!"
  12. if not "%%i"==%0 (     
  13. if not "!f!"=="!f1!" (
  14.          if exist "!f1!" (
  15.             echo 由于!f1!存在同名,!f! 文件名未改           ) else ren "!f!" "!f1!"
  16.      )  
  17.      endlocal
  18.   )
  19. )
复制代码
上面这段代码是我这几天在网上东拼西凑来的,
现在问题是:
1、不能把文件夹和文件的字符同时替换,网上查了下,好像是因为先把父文件夹的字符替换了,所以后面文件的路径就找不到了因此失效。如果要实现文件夹和文件同时替换,代码要怎么修改?
2、好像不能对!号等特殊字符开头的文件和文件夹进行替换,要怎么办?

如果2比较难实现,代码比较麻烦我这种水平也理解不了,可以告诉我问题1的解决方法吗?问题1目前比较重要……
谢谢大家!!新来的如果发帖有什么不对的地方还请包含。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 2# pcl_test

感谢前辈指点,经测试您写的代码很好用。

不过果然带!开头的文件不好弄啊。碰到带!号开头要替换的文件夹的话就会卡在“正在替换文件夹名……”这里了。
不过没关系,反正通常工作中也不会碰到带!开头的文件夹。再次感谢!

TOP

回复 3# CrLf


    嗯,之前有一位朋友也提了 sort /r 不过好像后来他删帖了?

总之我现在是改成这样来用了。
  1. for /f "delims=" %%i in ('dir /b/s^|sort /r') do (
  2. setlocal enabledelayedexpansion
  3. set "f=%%~nxi"
  4. call set f="%%f:%strtemp1%=%strtemp2%%%"
  5. if not "%%i"==%0 (     
  6. call ren "%%i" %%f%%
  7.      )
  8.      endlocal)
复制代码
虽然有些功能没法实现,也无法替换!开头的文件,这也暂时够用吧~谢谢您的帮助!

TOP

回复 6# pcl_test


    非常感谢您的帮助!!完美解决了问题!
明天我先好好研究一下您的代码多学习一下,越来越觉得批处理有趣了~谢谢!

TOP

返回列表