バッチファイル引数のパーセント記号(%および%%)はどういう意味ですか?


11

これが何を意味するのか見当がつかないので、私は何かを見逃していると思います。

例:

for /D %%A in (*) do "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

その行は7zip、個々のフォルダーを圧縮するためにコマンドラインバージョンを使用することになっていますが%%A、このコンテキストで何を意味するのか迷っています。



1
コマンドラインとバスファイルを混同しました。上の記号を変更しました。
ジムキーガー

回答:


12

for後でクエリで使用するための変数に沿って渡すことができるようにコマンドは、我々は、プレースホルダを使用するように指示され、プレースホルダを必要とする%A、あなたは用途を見たコードが理由で%%Aあるため(私はあなたがこれを見つけたところであると仮定)、バッチファイル内にあるが%特別な意味を持っているので、コマンドに渡される%%ように2回行う必要があります。%for

コマンドが実行していることを実際に分解するために、コマンドには2つの部分があります。

 for /D %%A in (*) do .....

この部分の内容は、現在のフォルダー内のすべてのフォルダー%%Aに対して、現在処理中のフォルダーの名前に置き換えて次のコマンドを実行することです。

..... "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

この部分の内容は、コマンド"\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"を実行し、2つ%%Aのを現在処理中のレコードに置き換えることです。


ちょっと選んでください-forループの/ Dは、ワイルドカードを「このフォルダとすべてのサブフォルダ内のすべてのファイル」ではなく、ディレクトリに制限します(コマンド拡張機能が有効になっていると仮定)。
アーニー

あなたが正しい@アーニー、私はヘルプページの/ Rスイッチを見ていました、私の答えを修正しました。
スコットチェンバレン

ありがたいことに、これがいかに卑劣なように見えるかを示していますが、いくつかのオンラインマニュアルを掘り下げなければならないかなり古風なものです。
ジムキーガー


0

あなたのシナリオでは、%% Aは "for"ループが繰り返し処理するもののプレースホルダーです(/ Dはディレクトリを示します)。したがって、ループの各反復、%% Aはディレクトリの1つです。

バッチコードでは、%の代わりに%%が表示されます。コマンドプロンプトで%%の代わりに%が使用されていることがわかります。

したがって、バッチファイルコードをコマンドプロンプトにコピーして、%%を使用して実行すると、エラーが発生し、その逆も同様であることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.