0

変数を解析しようとしています。NAMELIST = "AAA BBB CCC" と言って、それぞれを変数として保存します。次に、これらの新しい変数を別のコマンドで使用する必要があります。例えば:

perl.exe C:\action.pl <VAR1>
perl.exe C:\action.pl <VAR2>
perl.exe C:\action.pl <VAR3>

私は Windows Batch を初めて使用するので、助けていただければ幸いです。

私はこのスレッドを認識していますが、解決策を完全には理解していません

Windows バッチ ファイル: コマンドの結果で変数を設定する方法は?

4

2 に答える 2

1

「それぞれを変数に格納する」という場合、ここで関係する概念は配列です。この方法で、NAMELIST変数の単語を3つの配列要素に分割できます。

setlocal EnableDelayedExpansion
set i=0
for %%a in (%namelist%) do (
   set /A i=i+1
   set VAR!i!=%%a
)

このようにして、各配列要素を直接使用できます。

perl.exe C:\action.pl %VAR1%
perl.exe C:\action.pl %VAR2%
perl.exe C:\action.pl %VAR3%

または、ループを使用してより簡単な方法で:

for /L %%i in (1,1,3) do perl.exe C:\action.pl !VAR%%i!

編集:NAMELIST変数の値の数に制限はなく、このメソッドを使用できます。3の代わりに前の値の%i%を使用してください(さらに良いのは、「n」で変更してください)。また、この方法で標準の配列表記を使用することをお勧めしますVAR[%%i]::

setlocal EnableDelayedExpansion
set namelist=AAA BBB CCC DDD EEE FFF
set n=0
for %%a in (%namelist%) do (
   set /A n+=1
   set VAR[!n!]=%%a
)
for /L %%i in (1,1,%n%) do perl.exe C:\action.pl !VAR[%%i]!
于 2013-02-19T17:20:36.793 に答える
0

forループを使って一括で変数を設定することができます。リンクにある例を説明しようと思います。

for /f "delims=" %%a in ( command) do @set theValue=%%a

For /F は、出力をトークンに分割するために使用されます。「delims=」は、明示的なセパレーターが指定されていないことを意味するため、「スペース」が想定されます。%%a はループのインデックス変数に似ていますが、インデックス変数が数値を持つプログラミング言語の従来のインデックス変数の代わりに、バッチ内のインデックス変数はトークン、つまりコマンドの出力を格納できます。set コマンドは、変数 "theValue" をコマンドの出力/トークンを保持する %%a に設定します。したがって、ステートメントが次の場合:

 for /f "delims=" %%a in (`echo Hi everyone!`) do @set theValue=%%a

theValue will then hold "Hi" as it is the first token seprated by space.

必要に応じて、独自のセパレーターを指定できます。お役に立てれば!

于 2013-02-19T16:51:34.367 に答える