Java 切换目录然后使用参数触发命令
Java switch directories and then fire command with parameters
嘿,我正在尝试更改目录,然后 运行 我的带参数的命令。
final String path = "\Local// Apps\IBM\SDP\scmtools\eclipse";
final String command = "scm help";
final String dosCommand = "cmd /c \"" + path + "\"" + command;
final Process process = Runtime.getRuntime().exec(dosCommand);
final InputStream in = process.getInputStream();
int ch;
while((ch = in.read()) != -1) {
System.out.print((char)ch);
}
运行没有错误,但没有输出任何内容。然而,这是完成后显示的内容:
<terminated, exit value: 0>C:\Local Apps\IBM\SDP\jdk\bin\javaw.exe (Jul 22, 2019, 11:21:37 AM)
预期的输出应该是:
那么我这样做正确吗?
如安德烈亚斯所建议
Process p = null;
ProcessBuilder pb = new ProcessBuilder("scm.exe");
pb.directory(new File("C:/Local Apps/IBM/SDP/scmtools/eclipse"));
p = pb.start();
我收到以下错误:
Cannot run program "scm.exe" (in directory "C:\Local Apps\IBM\SDP\scmtools\eclipse"): CreateProcess error=2, The system cannot find the file specified
您应该使用 ProcessBuilder
而不是 Runtime.exec
,例如
Process proc = new ProcessBuilder("scm.exe", "help")
.directory(new File("C:\Local Apps\IBM\SDP\scmtools\eclipse"))
.inheritIO()
.start();
proc.waitFor(); // optional
如果需要,您也可以通过命令解释器,例如如果命令是脚本(.bat 或 .cmd 文件):
Process proc = new ProcessBuilder("cmd", "/c", "scm", "help")
.directory(new File("C:\Local Apps\IBM\SDP\scmtools\eclipse"))
.inheritIO()
.start();
proc.waitFor();
inheritIO()
表示您不需要处理命令输出。它将被发送到控制台,或者 Java 自己的输出所在的任何地方。
嘿,我正在尝试更改目录,然后 运行 我的带参数的命令。
final String path = "\Local// Apps\IBM\SDP\scmtools\eclipse";
final String command = "scm help";
final String dosCommand = "cmd /c \"" + path + "\"" + command;
final Process process = Runtime.getRuntime().exec(dosCommand);
final InputStream in = process.getInputStream();
int ch;
while((ch = in.read()) != -1) {
System.out.print((char)ch);
}
运行没有错误,但没有输出任何内容。然而,这是完成后显示的内容:
<terminated, exit value: 0>C:\Local Apps\IBM\SDP\jdk\bin\javaw.exe (Jul 22, 2019, 11:21:37 AM)
预期的输出应该是:
那么我这样做正确吗?
如安德烈亚斯所建议
Process p = null;
ProcessBuilder pb = new ProcessBuilder("scm.exe");
pb.directory(new File("C:/Local Apps/IBM/SDP/scmtools/eclipse"));
p = pb.start();
我收到以下错误:
Cannot run program "scm.exe" (in directory "C:\Local Apps\IBM\SDP\scmtools\eclipse"): CreateProcess error=2, The system cannot find the file specified
您应该使用 ProcessBuilder
而不是 Runtime.exec
,例如
Process proc = new ProcessBuilder("scm.exe", "help")
.directory(new File("C:\Local Apps\IBM\SDP\scmtools\eclipse"))
.inheritIO()
.start();
proc.waitFor(); // optional
如果需要,您也可以通过命令解释器,例如如果命令是脚本(.bat 或 .cmd 文件):
Process proc = new ProcessBuilder("cmd", "/c", "scm", "help")
.directory(new File("C:\Local Apps\IBM\SDP\scmtools\eclipse"))
.inheritIO()
.start();
proc.waitFor();
inheritIO()
表示您不需要处理命令输出。它将被发送到控制台,或者 Java 自己的输出所在的任何地方。