如何用Java在同一终端执行多条命令?现有代码打开多终端求解
当然可以在同一个终端执行多条命令!
你的代码现在会打开两个终端窗口,是因为每次调用rt.exec()都会启动一个全新的cmd.exe实例。要让两条命令在同一个窗口里运行,只需要把它们合并成单个cmd指令,让同一个终端进程依次执行即可。
解决方案1:合并命令到同一个start指令里
用命令连接符&&或者&把两条命令串起来,放在同一个/K参数后面:
try { Runtime rt = Runtime.getRuntime(); // 使用 && 确保前一条命令执行成功后再执行后一条;如果不管成功与否都要执行,换成 & rt.exec("cmd /c start cmd.exe /K \"java -version && javac -version\""); System.out.println("命令已发送到同一个终端窗口"); } catch (Exception e) { System.out.println("出现错误"); e.printStackTrace(); }
&&:仅当前面的命令执行成功(退出码为0)时,才执行后面的命令&:不管前面的命令是否成功,都会执行后面的命令
解决方案2:用ProcessBuilder替代Runtime.exec(更推荐)
ProcessBuilder比Runtime.exec更灵活,能避免一些字符串转义的坑:
try { ProcessBuilder pb = new ProcessBuilder( "cmd.exe", "/c", "start", "cmd.exe", "/K", "java -version && javac -version" ); pb.start(); System.out.println("命令已发送到同一个终端窗口"); } catch (Exception e) { System.out.println("出现错误"); e.printStackTrace(); }
小提示
- 如果你希望执行完命令后终端自动关闭,把
/K换成/C——不过这样可能看不到输出,因为窗口会立刻退出,所以/K更适合需要查看结果的场景。 - 如果命令里包含空格或特殊字符,要注意转义,不过你这里的
java -version和javac -version不需要额外处理。
内容的提问来源于stack exchange,提问作者Chandrakanth
相关产品推荐
相关产品推荐

