2016-06-01 2 views
0

次のようなプロブレンがあります。JavaでBATを起動し、環境を保存して(BATによって変更された)環境を次のBATに渡します

さんが持っている2つのBAT-ファイルは、B1とB2と呼ばれるとしましょう:

b1がENVを設定している:set hello=hello

B2は/印刷にこのENVをエコーされます。echo -- %hello% -- >> C:\Users\Administrator\Desktop\hello.txt

は今、私がしたいですb1とb2を呼び出してJAVAをスローし、%hello%の値に基づいてb2にhelloをエコーし​​ます。

私はこれを行う場合は、次の

-- -- 

情報を2回の呼び出しの間に失われているようです:

Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b1.bat").waitFor(); 
Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b2.bat").waitFor(); 

私はhello.txtでこの出力を取得します。誰か助けてくれますか? ありがとうございます!

+0

1明らかな方法は、第二のbatファイルから赤になります一時ファイルにデータを書き込むことです。 – npocmaka

+0

'' Runtime.getRuntime()。exec( "cmd/c call C:\\ Users \\ Administrator \\ Desktop \\ b1.bat」のように、同じcmd.exeの下にある2つのバッチファイルを実行するだけです。 &call C:\\ Users \\ Administrator \\ Desktop \\ b2.bat ")。waitFor();' – Aacini

答えて

0

ええ、解決策が見つかりました。 新しいbatファイル(b0)を生成し、他のファイルを呼び出しました。 このコードは私に役立ちます。

b0.batコード:

call b1.bat 
call b2.bat 

のJava-コード:

Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b0.bat").waitFor(); 
0

環境は、親プロセスから子プロセスにのみ継承されます。 b1.batが終了すると、b1.batによって設定されたものはすべて失われます(つまり、Javaプロセスもb2.batもb1.batによって設定された環境変数を参照しません)。もちろん、これらのコードはJavaコードが起動できる他のプロセスには表示されません。

子プロセスの環境変数を設定する場合は、ProcessBuilderを使用して実行する必要があります(起動する前に特定の環境変数を設定できるようにする必要があります)。