我想一次性重命名大量文件和文件夹,如何使用批处理脚本来执行此操作

我想一次性重命名大量文件和文件夹,如何使用批处理脚本来执行此操作

我想一次性重命名大量文件和文件夹,如何使用批处理脚本来执行此操作

我有仅用于更改文件或文件夹的代码,不能同时更改两者

@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

相关内容