Windowsでの別のコマンドのコマンドライン引数への出力のリダイレクト

StackOverflow https://stackoverflow.com/questions/1425807

  •  07-07-2019
  •  | 
  •  

質問

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をインストールします。

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