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)
可为什么这是发生有人向我解释,可以如何avaoid这个问题呢?
我试图添加一个“异常处理程序”,但它没有用。
set "nname=copy_"
for %%A in (*.txt) do (
if exist %nname%%%A goto :exit
ren %%A %nname%%%A
)
:exit
echo file exists
在此先感谢!
谢谢!它效果很好,比我做的临时文件夹工作要好得多。要明确一点,通过使用“usebackq”函数,在执行shell之前完成* .txt的循环之前? – 2012-07-31 18:32:02
/F选项允许您将命令的输出用作“for”命令的“输入”。 “usebackq”选项只是简单地改变它是一个''字符串还是一个被视为要执行的命令的字符串。 (最好添加“usebackq”选项并将你的命令放在''中)。接下来会发生的事情是shell将''作为命令处理文本中的文本,执行该命令,然后从该命令中获取输出(来自命令的stdout)并逐行处理它。每行都以空格字符分割为标记,并将标记分配给for变量。 – 2012-08-01 14:58:55
在循环中,只有一个变量%% A,因此只有输出每行上的第一个标记被分配给%% A。但是'dir/b * .txt'完全可以输出你想要的结果:每个文件只有一行,只有文件名。在“for”循环开始执行之前完成“dir ...”这一事实只是一个虚拟的shell - 我直到测试它时才确定。 – 2012-08-01 15:00:03