質問

いくつかのディレクトリにあるzipにあるrarをバッチ抽出しようとしています。要するに、これはrarファイルのループです:

for %%r in (*.rar) do (

unrar x %%r
)

問題は、%% rが間違った値を取得することです。ファイル名が" file name.rar"の場合%% rは値" file"を取得します-ファイル名の最初のスペースで停止します。

名前にスペースを含むファイルファイルを処理するためにこのループを取得するにはどうすればよいですか

ありがとう

役に立ちましたか?

解決

これを試してください:

for /f "usebackq delims==" %i in (`dir /b *.rar`) do unrar x "%i"

バッチファイルで使用している場合は、エスケープするにはパーセント記号を2倍にする必要があることに注意してください。

他のヒント

%% r には、スペースを含む完全なファイル名が含まれます。問題があるのは unrar への呼び出しです。ファイル名にスペースが含まれている場合は、引用符で囲む必要があります。そうしないと、 unrar は、2つの(スペースで区切られた)パラメーター file および< code> name.rar は、実際にはスペースを含む単一のファイル名です。

次のように動作します:

for %%r in (*.rar) do unrar "%%r"

また、問題のある場所に興味がある場合は、単にプログラム呼び出しをechoに置き換えると非常に役立つ場合があります。

for %%r in (*.rar) do @echo %%r

%% rにはファイル名にスペースが含まれており、それらがバラバラにならないことがわかります。

問題は、 'for'がデフォルトの区切り文字としてスペースを使用することです。これは、delims = xxxを使用して設定できます。構文については、こちらをご覧ください。または、 ForFiles を使用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top