Board logo

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

作者: liaoguinan    时间: 2024-1-19 23:22     标题: [已解决]批处理如何遍历多层目录下的文件夹名称并修改?

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


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

作者: ppll2030    时间: 2024-1-20 00:27

把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
复制代码

作者: ShowCode    时间: 2024-1-20 13:13

回复 2# ppll2030


    想一下,二级目录被改名之后,轮到三级目录改名的时候它还以为二级目录是旧名字呢,会出错吧。
作者: newswan    时间: 2024-1-20 14:13

回复 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 .
复制代码

作者: newswan    时间: 2024-1-20 14:34

批处理
  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
复制代码

作者: ppll2030    时间: 2024-1-20 20:27

回复 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
复制代码

作者: liaoguinan    时间: 2024-1-20 22:15

回复 6# ppll2030


    运行空白没见有反应?去掉echo显示语法错误
作者: aloha20200628    时间: 2024-1-21 11:22

本帖最后由 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:我爱小明=小明!")
复制代码

作者: ppll2030    时间: 2024-1-21 12:17

回复 7# liaoguinan


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

如果仅仅是去掉 文件夹名为 “我爱小明” 中的“我爱”
  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
复制代码

作者: liaoguinan    时间: 2024-1-21 17:35

回复 10# 77七


    完美




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2