0

ファイルのリストの絶対パスを含むファイル「file_list.txt」があります。各行はセミコロンで終わります。ファイルはこのように表示されます。

"C:\Users\ab cd\AK\AK_PPF.pdf";
"C:\Users\ab cd\AK\AK_PPF.jpg";
"C:\Users\ab cd\AK\DL PAGE 1.jpg";
"C:\Users\ab cd\AK\dl pAGE 2.jpg";
"C:\Users\ab cd\AK\dl pAGE 3.jpg";

各ファイルのファイルサイズをエコーする次のコードを書きました。

@echo off
setlocal
set v_file_list="file_list.txt"
FOR /F "delim=; tokens=1 usebackq" %%A IN (%v_file_list%) DO @echo %%~zA

バッチ ファイルを実行すると、「delim=; tokens=1 usebackq」は現時点では予期されていなかっ
たと表示さ れます。ここで何が間違っているのか教えてください。

4

3 に答える 3

2

Endoro が構文エラーを特定しました -DELIMS=;オプションのスペルミスです。

別の潜在的な問題があります:;ファイルまたはパス名に表示される有効な文字です。;名前の中にあることはめったにありませんが、時々出てきます。DELIMS=;を含むパスはすべて破損 (切り捨て) されます;

別の手法を使用して、不要な末尾の;.

拡張部分文字列操作を使用して最後の文字を削除することもできますが、同じループ内で変数を設定して拡張する必要があり、CALL が必要になるか、遅延拡張が必要になります。CALL はコストが高く (遅く)、展開が遅れると展開が破損%%Aします!(まれではあるがファイル名に有効な別の文字) が含まれている場合。そのため、遅延拡張のオンとオフを適切に切り替える必要があります。

ファイルパスが引用符で囲まれ、引用符の外にあるという事実に依存する、より簡単な解決策があり;ます。は単純な FOR ステートメント (/F オプションなし) のトークン区切り文字である;ため、追加の FOR ステートメントを使用して末尾を削除できます。;

for /f "usebackq delims=" %%A in (%v_file_list%) do for %%F in (%%A) do @echo %%~zF
于 2013-04-10T10:47:25.267 に答える