找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 47889|回复: 12

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

[复制链接]
发表于 2015-3-29 22:10:18 | 显示全部楼层 |阅读模式
本帖最后由 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目前比较重要……
谢谢大家!!新来的如果发帖有什么不对的地方还请包含。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-3-30 00:37:16 | 显示全部楼层
本帖最后由 pcl_test 于 2015-3-30 10:21 编辑

回复 1# akb4888
  1. @echo off & color 3a & setlocal enabledelayedexpansion
  2. title 批量替换文件(文件夹)名
  3. echo 此批处理可批量替换本文件所在文件夹下所有文件(文件夹)名。
  4. echo.
  5. set /p str1= 请输入要替换的文件(文件夹)名字符串(可替换空格):
  6. set /p str2= 请输入替换后的文件(文件夹)名字符串(去除则直接回车):
  7. echo.
  8. echo 正在替换文件名……
  9. for /f "delims=" %%a in ('dir /a-d /s /b') do (
  10. if "%%~nxa" neq "%~nx0" (
  11. set "f=%%~na"
  12. set "f=!f:%str1%=%str2%!"
  13. if not exist "%%~dpa!f!%%~xa" ren "%%a" "!f!%%~xa"
  14. )
  15. )
  16. echo 替换文件名完成
  17. echo.
  18. echo 正在替换文件夹名……
  19. :folder
  20. set n=0
  21. for /f "delims=" %%i in ('dir /ad /s /b ^|find "%str1%"') do (
  22. set t=%%~ni
  23. set t=!t:%str1%=%str2%!
  24. if not exist "%%~dpi!t!" ren "%%i" "!t!" 2>nul
  25. set /a n+=1
  26. )
  27. if "!n!" neq "0" goto folder
  28. echo 替换文件夹名完成
  29. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2015-3-30 00:54:20 | 显示全部楼层
本帖最后由 CrLf 于 2015-3-30 00:55 编辑

先文件和子文件再文件夹
  1. dir /s /b | sort /r
复制代码
  1. dir /s /b | sort /+65535
复制代码
 楼主| 发表于 2015-3-30 02:01:13 | 显示全部楼层
回复 2# pcl_test

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

不过果然带!开头的文件不好弄啊。碰到带!号开头要替换的文件夹的话就会卡在“正在替换文件夹名……”这里了。
不过没关系,反正通常工作中也不会碰到带!开头的文件夹。再次感谢!
 楼主| 发表于 2015-3-30 02:04:11 | 显示全部楼层
回复 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)
复制代码
虽然有些功能没法实现,也无法替换!开头的文件,这也暂时够用吧~谢谢您的帮助!
发表于 2015-3-30 12:59:38 | 显示全部楼层
回复 5# akb4888
试试这样
  1. @echo off
  2. title 批量替换文件(文件夹)名
  3. echo 此批处理可批量替换本文件所在文件夹下所有文件(文件夹)名。
  4. echo.
  5. set /p str1= 请输入要替换的文件(文件夹)名字符串(可替换空格):
  6. set /p str2= 请输入替换后的文件(文件夹)名字符串(去除则直接回车):
  7. echo.
  8. echo 正在替换文件(文件夹)名……
  9. for /f "delims=" %%a in ('dir /s /b ^|sort /+65535') do (
  10. if "%%~nxa" neq "%~nx0" (
  11. set "file=%%a"
  12. set "name=%%~na"
  13. set "extension=%%~xa"
  14. call set "name=%%name:%str1%=%str2%%%"
  15. setlocal enabledelayedexpansion
  16. ren "!file!" "!name!!extension!" 2>nul
  17. endlocal
  18. )
  19. )
  20. echo 完成
  21. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
jave000 + 1 henyouyong
akb4888 + 1 十分感谢热心帮助!

查看全部评分

 楼主| 发表于 2015-3-31 00:37:01 | 显示全部楼层
回复 6# pcl_test


    非常感谢您的帮助!!完美解决了问题!
明天我先好好研究一下您的代码多学习一下,越来越觉得批处理有趣了~谢谢!
发表于 2018-11-4 00:08:00 | 显示全部楼层
回复 6# pcl_test
为什么我替换有的时候成功  有的成功不行呢  奇怪
发表于 2018-11-4 00:16:38 | 显示全部楼层
回复 6# pcl_test

比如说这个  我想把“.”替换成A  就总是不成功
发表于 2020-6-27 19:39:49 | 显示全部楼层
文件夹名只能替换一个字符,不知道怎么调,如A.10.-3,用版主的代码后变成A_10.-3(指定点.替换为下划线_),文件名则能正常替换。
发表于 2023-8-4 22:41:58 | 显示全部楼层
回复 6# pcl_test


    大佬 有些文件没有文件名  是直接 .xxx 这形式的 好像会 变成 str1=str2.xxx
    怎么写 直接排除 “.” 开头的文件或者文件夹?
发表于 2023-8-5 01:18:04 | 显示全部楼层
回复 9# 10# 11#
  1. @echo off
  2. rem 批处理保存为ansi编码格式。替换文件名(不包括扩展名)或者文件夹名中的指定字符
  3. set /p str1=替换前:
  4. set /p str2=替换后:
  5. for /f "delims=" %%i in ('dir /b /s ^|find /v "%~f0" ^|sort /r') do (
  6.         set "f=%%~fi"
  7.         set "n=%%~ni"
  8.         set "x=%%~xi"
  9.         setlocal enabledelayedexpansion
  10.         if exist "!f!" (
  11.                 set "nx=!n!!x!"
  12.                 ren "!f!" "!nx:%str1%=%str2%!"
  13.         ) else if "!n!" neq "" (
  14.                 ren "!f!" "!n:%str1%=%str2%!!x!"
  15.         )
  16.         endlocal
  17. )
  18. pause
复制代码
发表于 2023-8-5 06:35:32 | 显示全部楼层
回复 12# 77七


    谢谢大神,完美!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:44 , Processed in 0.023353 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表