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

シェルは、名前変更コマンドの処理を開始する前にファイルのリストを完成させないため、最初の名前変更コマンドの結果、つまりcopy_1.txtは*.txtと一致します。

それを回避する1つの方法:

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