2

Java Web アプリケーションでバッチファイルを実行すると、以下のような問題が発生します。

ケース 1 のみが期待どおりに機能する理由がわかりません。ケース 2、3、4 では、バッチ ファイルの一部のみが実行されます。誰でも理由を説明できますか?どうもありがとうございます。

を使用してコマンドを実行しますRuntime.getruntime().exec(command)

case1. cmd /c start C:\mytest.bat
case2. cmd /c start /b C:\mytest.bat
case3. cmd /c C:\mytest.bat
case4. C:\mytest.bat

mytest.bat

echo line1 >>%~dp0test.txt
echo line2 >>%~dp0test.txt
echo line3 >>%~dp0test.txt
echo line4 >>%~dp0test.txt
echo line5 >>%~dp0test.txt
echo line6 >>%~dp0test.txt
echo line7 >>%~dp0test.txt
echo line8 >>%~dp0test.txt
echo line9 >>%~dp0test.txt
echo line10 >>%~dp0test.txt
echo line11 >>%~dp0test.txt
echo line12 >>%~dp0test.txt
echo line13 >>%~dp0test.txt
echo line14 >>%~dp0test.txt
echo line15 >>%~dp0test.txt
echo line16 >>%~dp0test.txt
echo line17 >>%~dp0test.txt
echo line18 >>%~dp0test.txt
echo line19 >>%~dp0test.txt
echo line20 >>%~dp0test.txt
exit

結果 test.txt

ケース1:

line1 
line2 
line3 
line4 
line5 
line6 
line7 
line8 
line9 
line10 
line11 
line12 
line13 
line14 
line15 
line16 
line17 
line18 
line19 
line20 

ケース 2、3、4:

line1
line2
line3
line4
line5
4

3 に答える 3

1

おそらくこれは、基になるプロセス (の実行mytext.bat) が完了する前にプログラムが終了するために発生します。最初のケースstartでは、独自の環境で実行を開始するものを使用するため、親が終了しても実行は継続します。他のすべてのコマンドは、現在の環境でバッチ ファイルを実行し、アプリケーションで終了します。

mytext.batこれを修正するには、 の実行が完了するまで待つ必要があります。これを行うにはいくつかの方法がありますが、Process Builder を使用することをお勧めします。

ProcessBuilder b = new ProcessBuilder("cmd", "/c", "C:\\mytest.bat");
Process p = b.start();
p.waitFor();

あなたのアプローチを使用するには:

Process p = Runtime.getruntime().exec(command)
p.waitFor();
于 2013-09-30T07:33:44.357 に答える
0

次のように 2 番目のコマンドで始まる /wait をコマンドに追加するだけです。

 cmd /c start C:\mytest.bat
 case2. cmd /c start /wait /b C:\mytest.bat
 case3. cmd /c /wait C:\mytest.bat
 case4. C:\mytest.bat
于 2013-09-30T10:28:38.703 に答える