如何使用Java打开命令提示符并插入命令?

2022-09-01 02:07:23

是否可以打开命令提示符(我猜其他系统的任何其他终端),并在新打开的窗口中执行命令?

目前我拥有的是这个:

Runtime rt = Runtime.getRuntime();
rt.exec(new String[]{"cmd.exe","/c","start"});

我尝试在“start”之后添加下一个命令,我尝试运行另一个包含我的命令的rt.exec,但我找不到使其工作的方法。

如果这很重要,我正在尝试运行类似于以下内容的命令:

java -flag -flag -cp terminal-based-program.jar

编辑不幸的是,我有一些奇怪的发现。我已经能够成功启动命令提示符并使用以下方式传递命令:

rt.exec("cmd.exe /c start command");

但是,它似乎只适用于一个命令。因为,如果我尝试像这样使用命令分隔符“cmd.exe /c start command&command2”,第二个命令将通过后台传递(如果我只是使用rt.exec(“command2”);)。现在的问题是,我意识到我需要更改运行命令提示符的目录,因为如果我只使用jar文件的完整路径,jar文件会错误地从命令提示符的活动目录中读取数据,而不是包含其资源的jar目录。


答案 1

我知道人们建议远离rt.exec(String),但这有效,我不知道如何将其更改为数组版本。

rt.exec("cmd.exe /c cd \""+new_dir+"\" & start cmd.exe /k \"java -flag -flag -cp terminal-based-program.jar\"");

答案 2

如果一次运行两个命令只是为了更改运行命令提示符的目录,则 Runtime.exec 方法有一个重载,可用于指定当前工作目录。喜欢

Runtime rt = Runtime.getRuntime();
rt.exec("cmd.exe /c start command", null, new File(newDir));

这将在 newDir 的目录中打开命令提示符。我认为您的解决方案也可以正常工作,但这会使您的命令字符串或数组更加干净。

将命令作为字符串并将命令作为 String 数组存在重载。

但是,您可能会发现使用 ProcessBuilder 甚至更容易,它具有设置当前工作目录的方法。directory

希望这有帮助。


推荐