java执行命令提示符问题
获取异常: java.io.IOException:CreateProcess:\output:C:\InstallList.txt产品获取名称,版本错误=123 在java.lang.ProcessImpl.create(本机方法) 位于java.lang.ProcessImpl。(未知源) 位于java.lang.ProcessImpl.start(未知源) 位于java.lang.ProcessBuilder.start(未知源) 位于java.lang.Runtime.exec(未知源) 位于java.lang.Runtime.exec(未知源) 位于java.lang.Runtime.exec(未知源)java执行命令提示符问题,java,command,execute,prompt,Java,Command,Execute,Prompt,获取异常: java.io.IOException:CreateProcess:\output:C:\InstallList.txt产品获取名称,版本错误=123 在java.lang.ProcessImpl.create(本机方法) 位于java.lang.ProcessImpl。(未知源) 位于java.lang.ProcessImpl.start(未知源) 位于java.lang.ProcessBuilder.start(未知源) 位于java.lang.Runtime.exec(未知源)
在CmdExec.main(CmdExec.java:20)上,问题是您试图将
“/output:C:\\InstallList.txt产品获取名称,版本”
作为命令执行,但该命令不起作用。(事实上,在我看来这简直是胡说八道。)
我希望您应该像这样执行命令:
public class CmdExec {
public static void main(String argv[]) {
try {
Runtime rt = Runtime.getRuntime();
StreamWrapper error, output;
String TEMP = "/output:C:\\InstallList.txt product get name,version";
System.out.println(TEMP);
CmdExec rte = new CmdExec();
Process proc = rt.exec("wmic");
proc = rt.exec(TEMP);
error = rte.getStreamWrapper(proc.getErrorStream(), "ERROR");
output = rte.getStreamWrapper(proc.getInputStream(), "OUTPUT");
int exitVal = 0;
error.start();
output.start();
error.join(3000);
output.join(3000);
exitVal = proc.waitFor();
System.out.println("Output: "+output.message+"\nError: "+error.message);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
为了更快地获得更好的帮助,请发布一篇文章,这可能会解释什么是
StreamWrapper
。正如Jon所提到的,提出一个特定的问题也会有所帮助,即使只是“我该如何解决这个异常?”。Runtime.exec会为每次调用启动一个新的进程。exec(“wmic”)将启动不带参数的进程,exec(TEMP)具有不带可执行文件的命令行参数。结果毫无意义且失败。为什么不为参数使用字符串[]
,以rt.exec()
?这样,诸如C:\\Program Files\\InstallList.txt之类的输出路径就可以在不使用转义符或钝角替换字符的情况下进行处理。@Andrew-通常是这样。在这种特殊情况下,这没有什么区别。(无论如何都必须转义“\”)
rt.exec("wmic /output:C:\\InstallList.txt product get name,version");