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