0

Windowsバッチファイルを使用して、非常に多数のファイルの名前を一度に変更しています。名前の変更は、ファイル名にプレフィックスを追加するだけです。ファイルは、プレフィックスが何らかの形で 2 回適用される最後のファイルを除いて、正常に実行されます。何が間違っているのかわかりません。誰かが私に問題を指摘できますか?

for %%i in (*.csv) do ren %%i myprefix_%%i
4

2 に答える 2

3
@echo off
SETLOCAL
DEL *.csv
XCOPY ..\*.csv .
(
for %%i in (*.csv) do (
echo ====================
echo %%i
dir *.csv
ren %%i x%%i
dir *.csv
echo ====================

)
)>u:\junk.txt&edit u:\junk.txt

いくつかの .CSV を含むディレクトリの下のクリーンなディレクトリで上記のバッチを実行しました。現在のディレクトリの .csvs を消去し、それらを親ディレクトリからコピーして、プレフィックスを付けて名前を変更するだけです。かなり明らかになりました。

(U: は RAMDRIVE で、EDIT は EDITPLUS を実行します。ここでは NOTEPAD も同様です)

操作は、追加されるプレフィックスによって大きく異なります。「a」で始まる接頭辞は、「x」で始まる接頭辞とは異なる動作をします。AND結果は、使用されているファイルシステムによって異なります。NTFS はファイル名をアルファベット順に表示しますが、RAMDRIVE の FAT システムは名前を並べ替えません。

この問題は、「findnext」ファイル名メカニズムがファイル名のリストの変更を期待どおりに処理しないことが原因であると考えています。1 つを変更すると、その名前がリスト内で移動する可能性があるため、新しい名前が再び検出されると、ファイルが再処理される可能性があります (複数回発生する可能性があります)。

治療法は、for選択を次のものに置き換えることです

for /f "delims=" %%i in ('dir /b *.csv') do (

ここでDIRリストが作成されてから処理されるため、変更は影響しません。

于 2013-04-11T14:32:07.570 に答える
-1

ファイル名にスペースが含まれている可能性があります。ファイル名を二重引用符で囲みます。次のことを試してください。

for %%i in (*.csv) do ren "%%I" "myprefix_%%I"

これは次のように実行されます。

ren "tmp - Copy.csv" "myprefix_tmp - Copy.csv"

また、隠しファイルを探す必要があります。

于 2013-04-11T13:35:18.083 に答える