我寫了一個簡單的批處理腳本來遍歷特定目錄中的文件,並將一些文本(客戶端名稱)添加到文件名中。劇本工作正常;但是,目錄中最近修改的文件似乎要修改兩次。我嘗試了兩種解決此問題的方法 - 使用pushd作爲目錄並列出for循環中的完整路徑(以下各代碼)。在Windows批處理文件中多次處理文件For ... Loop。爲什麼?
兩個辦法我結束了類似下面(假定第三個文件是最近修改的文件):
原始文件名:
SomeFile1.rtf
SomeFile2.rtf
SomeFile3.rtf
重命名的文件名:
TextToPrepend_SomeFile1.rtf
TextToPrepend_SomeFile1.rtf
TextToPrepend_TextToPrepend_SomeFile1.rtf
不,這不是第三個文件的拼寫錯誤。它被第二次處理並且TextToPrepend被第二次預先佔用。我對Windows批處理腳本相當陌生,並且我嘗試過研究這個問題,但是找不到這樣做的原因。任何幫助表示讚賞。
代碼:
pushd C:\Images\Data\
rem setlocal ENABLEDELAYEDEXPANSION
for %%X in (*.rtf) do (
ren "%%X" TEXTTOPREPEND_"%%X"
)
popd
- 和 -
rem setlocal ENABLEDELAYEDEXPANSION
for %%X in (C:\Images\Data\\*.rtf) do (
ren "%%X" TEXTTOPREPEND_"%%~nX".rtf
)
如果它可以幫助任何的批處理腳本正在對Windows Server 2008的機器上執行。
我不能從Windows 7重現此我(* .RTF)用於%X做仁%×AppendText_%不帶X發生「雙重命名」。 – tamarintech 2011-04-06 17:16:56
我確實設法重現它。見ikegami的答案。 – tamarintech 2011-04-06 17:33:48
我**可以在win7上重現這個:'echo a> 00.rtf;回聲a> 01.rtf; (* .rtf)do(ren %% i a _ %% i)'中的%% i。 00.rtf被重命名兩次。 – Mat 2011-04-06 17:34:57