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