for
コマンドは、何をしたいあなたを与える必要があります。for
のヘルプから
for /f "tokens=1,2*" %%a in ("%*") do echo command -Duser=%%a -Dpwd=%%b %%c
(for /?
を):
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
は で始まる行を無視して、myfile.txtの各行を解析しますセミコロンで、各行の2番目と3番目のトークンを 本文に渡します。トークンはカンマやスペースで区切ります。 ボディステートメントでは、2番目のトークンを取得するための%i、3番目のトークン を取得するための%j、3番目以降のすべての残りのトークンを取得する%kに注目してください。 のファイル名にスペースが含まれている場合は、ファイル名を二重引用符 で引用する必要があります。このように二重引用符を使用するには、 もusebackqオプションを使用する必要があります。そうでない場合、二重引用符は、解析するリテラル文字列を定義すると解釈されます。 だから私の溶液中の
、%%a
はスクリプトに渡された最初の引数の値が、第二引数の%%b
値、および%%c
残りの引数を持っています。
私は、コマンドプロンプトからbatch.bat USR PWD -Dargument1=1 -Dargument2=2
を実行すると、私が手:
command -Duser=USR -Dpwd=PWD -Dargument1=1 -Dargument2=2
は、引数を使用してコマンドを呼び出すためにdo
後echo
を削除します。
これは、最初の2つの引数のどちらも引用符で囲まれていない限り動作します。どちらの引数にも引用符で囲まれたスペースが含まれていると失敗します。ユーザー名やパスワードに問題はないでしょうが、一般的な解決策としては受け入れられません。 @dbenham; – dbenham
;あなたは正しいです、どんな種類の引用された文字列を渡して、すべての賭けはオフです。 –
実際に引用符で囲まれたargsは、引用符が平衡し、argsに '&' '|'などの特殊文字や空白が含まれていない限りOKです。別の潜在的な問題 - 引数は '、' ';' 'やスペースの代わりに '= '。 – dbenham