-1

a.batここにあるファイルを実行しようとしています:

C:\ A \ B \ C \ DE \ F

だから私は呼び出す:

cmd /c "cd C:\A\B\C\D E\F && a.bat"

CMDで、ファイルの実行を確認できます。

ここで、このファイルを実行してからJava削除したいので、次を実行します。

Runtime.getRuntime().exec("cmd start /wait /c "+ "\"cd C:\\A\\B\\C\\D E\\F && a.bat\"");

/wait実行後にのみファイルを削除したいため)

しかし、プログラムの実行が表示されません(CMDが開きません)。どうすればこれを修正できますか?

4

4 に答える 4

1

それは少し混乱です。確かに、最初のコマンドはコマンドプロンプトから機能しますが、その後、Java内からまったく異なる(そして機能しない)コマンドを実行しようとします。

Java内からa.batを削除することを想定しています。その場合、START/WAITは何の役にも立ちません。子プロセスはSTARTのターゲットが終了するのを待ちますが、それはJavaプロセスに影響を与えません。

子プロセスにファイルを削除させてみませんか?以下がうまくいくと思います。

Runtime.getRuntime().exec("cmd /c \"cd C:\\A\\B\\C\\D E\\F&&a.bat&&del a.bat\"");

バッチスクリプトが完了するまで、deleteコマンドは実行されません。スクリプトが失敗した場合でも、常にスクリプトを削除する場合は、に変更&&&ます。

于 2013-03-04T18:20:46.583 に答える
1
Runtime run = Runtime.getRuntime();  
        Process process = null;  
        String cmd = "cmd start /wait /c "+ "\"cd C:\\A\\B\\C\\D E\\F && a.bat\"";  
        try {  
            process = run.exec(cmd);
            process.waitFor();
            System.out.println(process.exitValue());
        }  
        catch (IOException e) {  
            e.printStackTrace();  
            process.destroy();  
        } 
于 2013-03-04T17:50:17.257 に答える
1

コマンドを入力することをお勧めします:

start /wait /c "cd C:\A\B\C\D E\F && a.bat"

別のバッチファイル(たとえばabc.bat)で。
そして、abc.bat次の行を使用してそのファイルを実行します。

Process process = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "abc.bat");
process.waitFor();//throws InterruptedException . So it must be caught.
if (process.exitValue() == 0 )
{
 System.out.println("Process is executed successfully!");
}
于 2013-03-04T18:01:12.097 に答える
0

私は解決策を見つけました:)

start /waitをコマンドの 2 番目の部分に移動したところ、機能しました。

Runtime.getRuntime().exec("cmd "+ "\"cd C:\\A\\B\\C\\D E\\F && start /wait a.bat\"");

于 2013-03-04T18:07:34.587 に答える