2

我正在使用批处理文件来附加多个文件名。

对于文件:1.txt、2.txt、3.txt、4.txt、5.txt - 我想附加 copy_1.txt

set "nname=copy_"

for %%A in (*.txt) do (
ren %%A %nname%%%A
)
exit

但是,循环似乎循环回到第一个文件并重新附加文件名。

这是cmd输出:

> for %A in (*.txt) do (ren %A copy_%A )
> (ren 1.txt copy_1.txt )
> (ren 2.txt copy_2.txt )
> (ren 3.txt copy_3.txt )
> (ren 4.txt copy_4.txt )
> (ren 5.txt copy_5.txt )
> (ren copy_1.txt copy_copy_1.txt )

有人可以向我解释为什么会发生这种情况以及如何避免这个问题?

我试图添加一个“异常处理程序”,但它没有用。

set "nname=copy_"

for %%A in (*.txt) do (
if exist %nname%%%A goto :exit
ren %%A %nname%%%A
)
:exit
echo file exists

提前致谢!

4

1 回答 1

1

Shell 在开始处理您的重命名命令之前不会完成其文件列表,因此第一个重命名命令的结果,即 copy_1.txt,将与 *.txt 匹配。

避免它的一种方法:

for /F "usebackq" %%A in (`dir /b *.txt`) do (ren %%A %nname%%A)
于 2012-07-31T18:02:47.520 回答