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

[文件操作] [已解决]批处理如何遍历多层目录下的文件夹名称并修改?

本帖最后由 liaoguinan 于 2024-1-21 19:05 编辑


如图如何遍历多层文件夹下发现我爱小明文件夹后把我爱小明文件夹去掉“我爱”两字
1

评分人数

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

把bat文件放在一级目录下运行。
预览无误后,把第4行的“echo”删除,再次运行即可更名。
  1. @echo off &setlocal enabledelayedexpansion
  2. for /f  "delims=" %%i in ('dir /b /s /ad ^| find "我爱"') do (
  3. set oldname=%%~ni&set newname=!oldname:我爱=!
  4. echo ren %%i !newname!
  5. )
  6. pause
复制代码

TOP

回复 2# ppll2030


    想一下,二级目录被改名之后,轮到三级目录改名的时候它还以为二级目录是旧名字呢,会出错吧。
测试代码之前请做好备份

TOP

回复 3# ShowCode

递归,先处理子目录
powershell
  1. function xren() {
  2. param( [String]$dir )
  3. Push-Location $dir
  4. Get-ChildItem -Directory | ForEach-Object {
  5. xren $_.Name
  6. echo $_.FullName
  7. Rename-Item $_.FullName -newname ("x" + $_.Name)
  8. }
  9. Pop-Location
  10. }
  11. xren .
复制代码

TOP

批处理
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call :C_ren .
  4. pause
  5. exit/b
  6. :C_ren
  7. pushd %1
  8. for /f  "usebackq delims=" %%i in (` dir /b /ad `) do (
  9. call :C_ren %%i
  10. echo %%~fi
  11. set oldname=%%~ni
  12. set newname=x%%~ni
  13. echo ren %%i !newname!
  14. )
  15. popd
  16. goto :eof
复制代码
1

评分人数

TOP

回复 3# ShowCode

哈哈。好像是有这个问题。那就再加个反向列出应该就可以了。
  1. @echo off &setlocal enabledelayedexpansion
  2. for /f  "delims=" %%i in ('dir /b /s /ad ^| find "我爱" ^| sort /r') do (
  3. set oldname=%%~ni&set newname=!oldname:我爱=!
  4. echo ren %%i !newname!
  5. )
  6. pause
复制代码

TOP

回复 6# ppll2030


    运行空白没见有反应?去掉echo显示语法错误

TOP

本帖最后由 aloha20200628 于 2024-1-21 15:05 编辑


请 for /d /r ... 简化一下
如下脚本置于一级目录下运行
针对本例版
  1. @echo off & for /d /r %%d in (*我爱小明*) do ren "%%~d" "小明"
复制代码
兼容性版
  1. @echo off & setlocal enabledelayedexpansion
  2. for /d /r %%d in (*我爱小明*) do (set "n=%%d" & ren "%%~d" "!n:我爱小明=小明!")
复制代码

TOP

回复 7# liaoguinan


    不应该啊?!
我这边测试没问题啊。
二楼的可以运行不?如果可以,那可能是你系统缺少sort.exe文件了。
我只是在二楼的基础上添加了sort的反向排序而已。

TOP

如果仅仅是去掉 文件夹名为 “我爱小明” 中的“我爱”
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('dir /b /s /ad "我爱小明" ^|sort /r') do (
  5. ren "%%i" "小明"
  6. )
  7. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 10# 77七


    完美

TOP

返回列表