Java中调用多条cmd命令

时间:2022-04-19 05:00:19

使用Java执行cmd代码很简单:

try{
Runtime.getRuntime().exec("cd /d E:");
}catch (Exception e) {
e.printStackTrace();
}

但是如果在cmd下面执行这段代码,则会报出类似下面的异常:

java.io.IOException: Cannot run program "cd": CreateProcess error=2, The system
cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at Test.main(Test.java:4)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find th
e file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 5 more

之所以出现这个情况,当前的cmd进程正在执行java代码,但是cmd命令也在当前进行执行,某些命令比如上面的改变目录的执行会是程序执行发生异常,自然会抛出异常。

如果查看cmd命令会发现下面的几条命令:

cmd /c start dir
cmd /k start dir

上面的命令会打开一个新的cmd窗口然后执行dir命令。因此可以通过这个命令打开一个新的cmd然后执行我们需要执行的命令即可。

但是在实际使用的时候发现可以打开新的窗口,但是在后面放置多条命令的时候则不会执行(一条命令正常)。后来转念一想如果把命令存到一个bat文件中,然后执行bat命令就行,因此有了下面的代码:

try{    
File file = new File("command.bat");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(command1,0,command1.length());
writer.newLine();
writer.write(command2,0,command2.length());
writer.newLine();
.....
writer.close();
Runtime.getRuntime().exec("cmd /c start "+file.getAbsolutePath());
}catch(Exception e){
e.printStackTrace();
}

这样就能很好的解决java执行多条cmd命令的问题了。