2009-09-15 10 views
5

Windowsでは、スクリプト/コマンドの出力を別のスクリプトの引数として使用するにはどうすればよいですか? |トゥー(パイプは、他のスクリプトは標準入力から読み込まれていないので、ここでは動作しません)Windowsの別のコマンドのコマンドライン引数に出力をリダイレクト

明らかにする:私は今

AnotherScript 12 

:私は例えば引数argを必要とAnotherScriptを、持っています引数(例では12)をスクリプトの出力から取得したい場合は、ScriptBとします。だから私はAnotherScriptが実際に引数を必要とするPythonスクリプトで、ScriptBは、いくつかの番号を生成し、Cygwinのbashスクリプトですので、私はそれを使用したい方法です

AnotherScript (ScriptB) 

の線に沿って何かをしたいと思います次のようなもの:

c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB) 

ありがとうございます。しかし、私は別のスクリプトを標準入力から読み直すように書き直しました。それはより良い解決策のようです。

+0

「他のスクリプト」*が標準入力ではない場合は、*から何を読んでいるか教えてください。 – Amber

答えて

8

注最初の1から他のスクリプトを呼び出すと、コマンドの引数を介してデータを転送:すべてこれはバッチファイルにあるようにコマンドを必要とします。従って、二重%の兆候。

は、コマンドの出力をキャプチャするforコマンドを使用することができます。

for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x 

、あなたが別のコマンドにその出力を使用することができます。

AnotherScript %args% 

これは%args%は最後が含まれていることになりますしかし、ScriptBの出力から行。バッチファイルの外部で使用する場合

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x 

あなたは%%xの代わりに%xを使用する必要があります。それはあなたが1行にこれをロールバックすることができ、単一の行を返す場合。

ただし、ScriptBが複数の行を返す場合は、それぞれの行に対してAnotherScriptが実行されます。あなたはこれを、けれども回避することができる唯一のバッチ内の最初のループ反復の後に破壊ファイル・バイ:あなたがコマンドラインパラメータとしてその内容を環境変数にあなたの最初のスクリプトの出力を保存し、使用でき

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof 
+0

私は同じ答えをポストしようとしていました。あなたは私を打つ! :) – Paulius

+0

私はうまくいきませんのでご了承ください:-) – Joey

+0

バッチファイル以外の用途では、2行目のスクリプトをすべての行で実行したい場合は、次のように 'cmd/v:on'を実行します。 "for/f" delims = "%x in( 'findstr string files_eg * .csv')do(set y =%x&set y =!y :: = !!&echo!z!)>> results.txt '(コロンでカンマを置き換えます) – mpag

1

データを一時ファイルに保存しますか?

標準の入出力でパイプの代わりに名前付きパイプを使用し、出力します。

または

3

2番目のスクリプト、もしそれがあなたが望むものなら。あなたは必要以上の方法より複雑なものを作っていない

for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a 
second_script %ouput% 
0

されています。このような

何かが?

bashのAnotherScriptを呼び出します。 Cygwinを必要に応じてインストールしてください。

+0

AnotherScriptには引数が必要で、この引数はscriptBの戻り値です。 – Rabarberski

+5

scriptB | xargs AnotherScript – reinierpost

関連する問題