-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
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 回答
1

这有点乱。当然,您的第一个命令可以在命令提示符下运行,但随后您尝试在 java.util 中运行一个完全不同的(并且不起作用的)命令。

我假设您要从 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\"");

直到批处理脚本完成后,删除命令才会触发。如果您想始终删除脚本,即使它失败,也请更改&&&.

于 2013-03-04T18:20:46.583 回答
0

我找到了解决方案:)

我将start /wait移至命令的第二部分,它起作用了:

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

于 2013-03-04T18:07:34.587 回答