标题: [文件操作] [已解决]批处理如何遍历多层目录下的文件夹名称并修改? [打印本页]
作者: liaoguinan 时间: 2024-1-19 23:22 标题: [已解决]批处理如何遍历多层目录下的文件夹名称并修改?
本帖最后由 liaoguinan 于 2024-1-21 19:05 编辑
如图如何遍历多层文件夹下发现我爱小明文件夹后把我爱小明文件夹去掉“我爱”两字
作者: ppll2030 时间: 2024-1-20 00:27
把bat文件放在一级目录下运行。
预览无误后,把第4行的“echo”删除,再次运行即可更名。- @echo off &setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /ad ^| find "我爱"') do (
- set oldname=%%~ni&set newname=!oldname:我爱=!
- echo ren %%i !newname!
- )
- pause
复制代码
作者: ShowCode 时间: 2024-1-20 13:13
回复 2# ppll2030
想一下,二级目录被改名之后,轮到三级目录改名的时候它还以为二级目录是旧名字呢,会出错吧。
作者: newswan 时间: 2024-1-20 14:13
回复 3# ShowCode
递归,先处理子目录
powershell- function xren() {
- param( [String]$dir )
- Push-Location $dir
- Get-ChildItem -Directory | ForEach-Object {
- xren $_.Name
- echo $_.FullName
- Rename-Item $_.FullName -newname ("x" + $_.Name)
- }
- Pop-Location
- }
-
- xren .
复制代码
作者: newswan 时间: 2024-1-20 14:34
批处理- @echo off
- setlocal enabledelayedexpansion
-
- call :C_ren .
-
- pause
- exit/b
-
- :C_ren
- pushd %1
- for /f "usebackq delims=" %%i in (` dir /b /ad `) do (
- call :C_ren %%i
- echo %%~fi
- set oldname=%%~ni
- set newname=x%%~ni
- echo ren %%i !newname!
- )
- popd
- goto :eof
复制代码
作者: ppll2030 时间: 2024-1-20 20:27
回复 3# ShowCode
哈哈。好像是有这个问题。那就再加个反向列出应该就可以了。- @echo off &setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /ad ^| find "我爱" ^| sort /r') do (
- set oldname=%%~ni&set newname=!oldname:我爱=!
- echo ren %%i !newname!
- )
- 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 ... 简化一下
如下脚本置于一级目录下运行
针对本例版- @echo off & for /d /r %%d in (*我爱小明*) do ren "%%~d" "小明"
复制代码
兼容性版- @echo off & setlocal enabledelayedexpansion
- 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
如果仅仅是去掉 文件夹名为 “我爱小明” 中的“我爱”
- @echo off
- rem 批处理保存为ansi编码格式
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /s /ad "我爱小明" ^|sort /r') do (
- ren "%%i" "小明"
- )
- pause
复制代码
作者: liaoguinan 时间: 2024-1-21 17:35
回复 10# 77七
完美
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |