Windowsでの別のコマンドのコマンドライン引数への出力のリダイレクト
質問
Windowsでスクリプト/コマンドの出力を別のスクリプトの引数として使用するにはどうすればよいですか? (他のスクリプトは標準入力から読み取らないため、パイプ|はここでは機能しません)
あまりにも明確:引数argを必要とするAnotherScriptがあります、例:
AnotherScript 12
ここで、引数(例では12)をスクリプトの出力から取得し、ScriptBと呼びます。だから私は
の線に沿って何かが欲しいAnotherScript (ScriptB)
AnotherScriptは実際には引数を必要とするpythonスクリプトであり、ScriptBはいくつかの数値を生成するcygwin bashスクリプトであるため、使用方法は次のようになります。
c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)
回答ありがとうございます。ただし、骨の折れる「for」構造が必要なため、AnotherScriptを書き換えて標準入力から読み取るようにしました。それはより良い解決策のようです。
解決
注:これにはすべて、コマンドがバッチファイルに含まれている必要があります。したがって、二重の%
記号。
for
コマンドを使用して、コマンドの出力をキャプチャできます。
for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x
その出力を別のコマンドで使用できます:
AnotherScript %args%
これにより、%args%
に ScriptB
の出力の最後の行が含まれます。 1行しか返さない場合は、これを1行にまとめることができます。
for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x
バッチファイル以外で使用する場合は、 %% x
ではなく%x
を使用する必要があります。
ただし、 ScriptB
が複数の行を返す場合、それらの行ごとに AnotherScript
が実行されます。最初のループの反復後に中断することで、バッチファイル内でのみこれを回避できます。
for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof
他のヒント
必要に応じて、最初のスクリプトの出力を環境変数に保存し、その内容を2番目のスクリプトのコマンドラインパラメーターとして使用できます。
次のようなもの:
for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a
second_script %ouput%
データを一時ファイルに保存しますか?
または標準入力および出力でパイプの代わりに名前付きパイプを使用します。
または最初のスクリプトから他のスクリプトを呼び出し、コマンド引数を介してデータを転送します
物事を必要以上に複雑にしませんか?
bashから別のスクリプトを呼び出します。必要に応じて、これを実行できるようにCygwinをインストールします。