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

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

[复制链接]
发表于 2024-1-19 23:22:38 | 显示全部楼层 |阅读模式
本帖最后由 liaoguinan 于 2024-1-21 19:05 编辑


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

评分

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

查看全部评分

发表于 2024-1-20 00:27:52 | 显示全部楼层
把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
复制代码
发表于 2024-1-20 13:13:13 | 显示全部楼层
回复 2# ppll2030


    想一下,二级目录被改名之后,轮到三级目录改名的时候它还以为二级目录是旧名字呢,会出错吧。
发表于 2024-1-20 14:13:22 | 显示全部楼层
回复 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 .
复制代码
发表于 2024-1-20 14:34:09 | 显示全部楼层
批处理

  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技术 +1 收起 理由
ppll2030 + 1 逻辑能力真强~!

查看全部评分

发表于 2024-1-20 20:27: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
复制代码
 楼主| 发表于 2024-1-20 22:15:59 | 显示全部楼层
回复 6# ppll2030


    运行空白没见有反应?去掉echo显示语法错误
发表于 2024-1-21 11:22:36 | 显示全部楼层
本帖最后由 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:我爱小明=小明!")
复制代码
发表于 2024-1-21 12:17:38 | 显示全部楼层
回复 7# liaoguinan


    不应该啊?!
我这边测试没问题啊。
二楼的可以运行不?如果可以,那可能是你系统缺少sort.exe文件了。
我只是在二楼的基础上添加了sort的反向排序而已。
发表于 2024-1-21 17:20:23 | 显示全部楼层
如果仅仅是去掉 文件夹名为 “我爱小明” 中的“我爱”
  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技术 +1 收起 理由
liaoguinan + 1 感谢

查看全部评分

 楼主| 发表于 2024-1-21 17:35:59 | 显示全部楼层
回复 10# 77七


    完美
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 05:32 , Processed in 0.020623 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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