使用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命令的问题了。