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

[文件操作] [已解决]如何批量去除或替换文件夹名称及子文件夹名称中的重复字符

[复制链接]
发表于 2020-4-18 23:50:55 | 显示全部楼层 |阅读模式
本帖最后由 thp2008 于 2020-4-20 17:59 编辑

[NASI.si-银河系] ABS 2015.02.25 No.1100
[NASI.si-银河系] ABS 2015.02.27 No.1101
[NASI.si-银河系] ABS 2015.03.02 No.1102
[NASI.si-银河系] ABS 2015.03.04 No.1103
[NASI.si-银河系] ABS 2015.03.06 No.1104
[NASI.si-银河系] ABS 2015.03.11 No.1106
[NASI.si-银河系] ABS 2015.03.13 No.1107
[NASI.si-银河系] ABS 2015.03.16 No.1108

打个比方,像上面这种文件夹名称,如果用批处理批量去除或替换掉,[NASI.si-银河系] ABS 这种字符串,包括子文件夹名称,一起去除或替换,请高手帮助,谢谢!

评分

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

查看全部评分

发表于 2020-4-19 12:32:10 | 显示全部楼层
本帖最后由 went 于 2020-4-19 12:54 编辑

ANSI编码
  1. @echo off
  2. REM 主文件夹
  3. set "folder=C:\Users\lenovo\Desktop\[NASI.si-银河系] ABS 2015.02.25 No.1100"
  4. REM 要替换的字符串
  5. set "key1=[NASI.si-银河系] ABS "
  6. REM 替换成的字符串
  7. set "key2="
  8. :loop
  9. REM 重命名子文件夹
  10. for /f "delims=" %%i in ('dir /s /b /ad "%folder%\*%key1%*" ^| sort /r') do call :renameFolder "%%~i"
  11. REM 检查,长路径错误
  12. dir /s /b /ad "%folder%\*%key1%*" >nul 2>nul && echo again... && goto :loop
  13. REM 重命名主文件夹
  14. for /f "delims=" %%i in ("%folder%") do call :renameFolder "%%~i"
  15. pause&exit
  16. :renameFolder
  17. set "dir=%~nx1"
  18. call set "dir=%%dir:%key1%=%key2%%%"
  19. echo %~1
  20. echo %dir%
  21. rename "%~1" "%dir%" && echo 成功! || echo 失败!
  22. echo ----------------------------------------------------
  23. goto :eof
复制代码

评分

参与人数 1技术 +1 收起 理由
thp2008 + 1 解决了问题

查看全部评分

 楼主| 发表于 2020-4-20 17:53:49 | 显示全部楼层
你好,很感谢您的帮助,经过仔细的测试,发现是可以的正常运行及更名的,我在你写的基础细化了一下,人工输入。测试也没有问题。
但我后来发现,这个有个小BUG,就是如果我如果替换后字符串,包含Key1的字符串的话,批处理就会无限循环,一直改一下去。
可不可以,只让批处理,只对所有文件夹只运行一遍,不再重复运行了,就可以消除这个BUG,但是如果不行的话,也没事,我已经知道这个BUG了。
其它都是可以正常改名的,包括文件夹名称中有空格,中文及字符都是可以正常运行的。看得出,您对批处理很有研究,再次感谢您的帮助。
  1. @echo off
  2. ECHO.
  3. ECHO 批量文件夹改名批处理
  4. ECHO.
  5. ECHO 说明:本批处理,可以对指定的文件夹及其所有子文件夹名称中,重复的字符串批量进行替换或删除。
  6. ECHO.
  7. REM 主文件夹
  8. REM 如果手工输入需要更名的文件夹目录,去掉REM
  9. REM set /p folder=请输入需要改文件夹名的路径:
  10. REM 本批处理需要拷贝到需要更名的主目录,自动获取需要更名目录的路径,如需手工输入,请REM掉下面这行。
  11. set folder=%~dp0
  12. REM 要替换的字符串
  13. ECHO.
  14. ECHO.
  15. set /p key1=请输入需要替换的文件夹名称中的重复字符串:
  16. REM 替换成的字符串
  17. ECHO.
  18. ECHO.
  19. echo 提示:如果不输入任何替换后的字符,直接回车,就是删除掉文件夹名称中上述提供的重复部分
  20. set /p key2=请输入替换后的字符串:
  21. :loop
  22. REM 重命名子文件夹
  23. for /f "delims=" %%i in ('dir /s /b /ad "%folder%\*%key1%*" ^| sort /r') do call :renameFolder "%%~i"
  24. REM 检查,长路径错误
  25. dir /s /b /ad "%folder%\*%key1%*" >nul 2>nul && echo again... && goto :loop
  26. REM 重命名主文件夹
  27. for /f "delims=" %%i in ("%folder%") do call :renameFolder "%%~i"
  28. pause&exit
  29. :renameFolder
  30. set "dir=%~nx1"
  31. call set "dir=%%dir:%key1%=%key2%%%"
  32. echo %~1
  33. echo %dir%
  34. rename "%~1" "%dir%" && echo 成功! || echo 失败!
  35. echo ----------------------------------------------------
  36. goto :eof
复制代码
发表于 2020-4-20 19:56:36 | 显示全部楼层
回复 3# thp2008
把这行注释掉
  1. REM dir /s /b /ad "%folder%\*%key1%*" >nul 2>nul && echo again... && goto :loop
复制代码
 楼主| 发表于 2020-4-20 20:09:43 | 显示全部楼层
回复 4# went

好的,可以了。谢谢
发表于 2023-5-12 13:48:25 | 显示全部楼层
回复 4# went


    提示 拒绝访问,失败 该怎么解决呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 22:13 , Processed in 0.012627 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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