我有这样的代码:
File file = new File(path + "\\RunFromCode.bat");
file.createNewFile();
PrintWriter writer = new PrintWriter(file, "UTF-8");
for (int i = 0; i <= MAX; i++) {
writer.println("@cd " + i);
writer.println(NATIVE SYSTEM COMMANDS);
// more things
}
writer.close();
Process p = Runtime.getRuntime().exec("cmd /c start " + path + "\\RunFromCode.bat");
p.waitFor();
file.delete();
什么情况是,它实际上执行前的文件中删除。
这是因为.bat
文件只包含本地系统调用? 我怎样才能让执行后删除.bat
文件? (我不知道的输出什么.bat
文件将是,因为它是动态变化的)。
通过使用start
,你问cmd.exe
开始在后台批处理文件:
Process p = Runtime.getRuntime().exec("cmd /c start " + path + "\\RunFromCode.bat");
所以,你从Java(启动进程cmd.exe
完成后台进程)之前返回。
删除start
命令来运行该批处理文件中的前景-那么, waitFor()
将等待批处理文件完成:
Process p = Runtime.getRuntime().exec("cmd /c " + path + "\\RunFromCode.bat");
据OP,它是有可用的控制台窗口很重要-这可以通过添加完成/wait
参数,通过@Noofiz的建议。 下面SSCCE为我工作:
public class Command {
public static void main(String[] args) throws java.io.IOException, InterruptedException {
String path = "C:\\Users\\andreas";
Process p = Runtime.getRuntime().exec("cmd /c start /wait " + path + "\\RunFromCode.bat");
System.out.println("Waiting for batch file ...");
p.waitFor();
System.out.println("Batch file done.");
}
}
如果RunFromCode.bat
执行EXIT
指令,自动关闭命令窗口。 否则,命令窗口保持打开状态,直到您明确地退出它EXIT
- Java进程正在等待,直到窗口在任何情况下关闭。
waitForProcessOutput()
没有的伎俩我们。
看到:
http://docs.groovy-lang.org/docs/groovy-1.7.2/html/groovy-jdk/java/lang/Process.html#waitForProcessOutput()
代码示例(在SOAPUI使用)
def process = "java -jar ext\\selenese-runner.jar".execute()
process.waitForProcessOutput()
def exitValue = process.exitValue()
在评注标记作为答案描述的代码中没有一个是一个解决方案。
第一个答案
Process p = Runtime.getRuntime().exec("cmd /c start " + path + "\\RunFromCode.bat");
第二个答案
Process p = Runtime.getRuntime().exec("cmd /c " + path + "\\RunFromCode.bat");
第三个答案
public class Command {
public static void main(String[] args) throws java.io.IOException, InterruptedException {
String path = "C:\\Users\\andreas";
Process p = Runtime.getRuntime().exec("cmd /c start /wait " + path + "\\RunFromCode.bat");
System.out.println("Waiting for batch file ...");
p.waitFor();
System.out.println("Batch file done.");
}
}