以下方法在Windows中启动cmd
,它接受需要运行的命令参数。
我已使用以下命令测试了此方法:net users
并且它工作正常并打印了用户帐户。但如果我运行dir
命令,我会收到以下错误:
java.io.IOEXception:
Cannot run program "dir": CreateProcess error=2, The system cannot find the file specified (in java.lang.ProcessBuilder)
代码:
private String commandOutPut;
public void startCommandLine(String s) throws IOException{
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(s); // you might need the full path
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String commandOutPut;
while ((commandOutPut = br.readLine()) != null) {
this.commandOutPut = this.commandOutPut + "\n" + commandOutPut;
}
System.out.println(this.commandOutPut);
}
答案 0 :(得分:2)
很明显,您的方法不启动cmd
。你是怎么得到这个观点的?
net
命令是一个独立的命令,因此它运行得很好,但dir
命令不是独立的,它是cmd.exe
的内部命令,所以你不能在没有命令的情况下运行它启动cmd.exe
来执行它。
要使其发挥作用,您必须不是dir
而是cmd.exe /c dir
或类似的东西。
答案 1 :(得分:0)
不知道这种看法能否对你有所帮助。但是,似乎"网络用户"被识别为Windows命令,因为"执行"对话框可以运行它。 但是,出于某种原因," dir"命令不是。尝试运行时,Windows会响应找不到该命令。
另外,我尝试使用内联参数运行Command,但是参数只是被忽略了。 (抱歉英语不好)
答案 2 :(得分:0)
我最好的猜测是,这是因为" net"是一个真正的可执行文件(有一个文件WINDIR \ System32 \ net.exe"),而" dir"是命令解释程序的内置命令 - 它没有可执行文件,直接在cmd.exe中执行。
然而,如果你可以解决这个问题" dir" cmd进程内的命令。语法 - 根据Microsoft docs - 是:
cmd /c dir
网站上也有一些相关的答案:
答案 3 :(得分:0)
您可以使用以下代码
import java.io. *;
public class demo
{
public static void main(String args[])
{
try
{
Process pro=Runtime.getRuntime().exec("cmd /c dir");
pro.waitFor();
BufferedReader redr=new BufferedReader(
new InputStreamReader(pro.getInputStream())
);
String ln;
while((ln = redr.readLine()) != null)
{
System.out.println(ln);
}
}
catch(Exception e) {}
System.out.println("Done");
}
}