我想一次性重命名大量文件和文件夹,如何使用批处理脚本来执行此操作
我有仅用于更改文件或文件夹的代码,不能同时更改两者
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=newdocV9
SET new=newdocV10
for /f "tokens=*" %%f in ('dir /b *.*') do (
SET newname=%%f
SET newname=!newname:%old%=%new%!
move "%%f" "!newname!"
)
我正在寻找使用批处理脚本一次性重命名文件和文件夹的代码
答案1
Dbenham 说得对,您现有的发布代码应该重命名文件和文件夹唯一值得怀疑的一点是move folder folder
:来源和目标可能会导致出现带有错误消息的断点The process cannot access the file because it is being used by another process
(参见下面输出中的示例)。简单的if /I
解决方法如下:
@echo off
SETLOCAL enableextensions enabledelayedexpansion
SET "old=ACK"
SET "new=XYZ"
for /f "tokens=*" %%f in ('dir /b *%old%*.*') do (
SET "newname=%%~f"
SET "newname=!newname:%old%=%new%!"
if /I "!newname!"=="%%~f" (
echo ==== "%%~f"
) else (
echo move "%%~f" "!newname!"
)
)
ENDLOCAL
goto :eof
输出:
==>D:\bat\SuperUser\881861.bat
move "ACKnowledge" "XYZnowledge"
move "assocbackup.txt" "assocbXYZup.txt"
move "ftypebackup.txt" "ftypebXYZup.txt"
move "StackOverflow" "StXYZOverflow"
==>move "ftypebackup.txt" "ftypebackup.txt"
1 file(s) moved.
==>move "StackOverflow" "StackOverflow"
The process cannot access the file because it is being used by another process.
==>
答案2
这里的问题是,SET 命令在 ( ) 部分内使用时不起作用。
为了解决这个问题,您可以创建第二个批处理文件并将所有命令放入其中,然后从命令中引用该批处理文件FOR
。
您的第二个批处理文件看起来像这样:
::dorename.cmd
SET old=newdocV9
SET new=newdocV10
SET newname=%1
SET newname=!newname:%old%=%new%!
move "%%f" "!newname!"
你的 for 命令看起来会像这样:
for /f "tokens=*" %%f in ('dir /b *.*') do dorename %%f