2014-11-05 78 views
0

我想从java运行cmd.exe命令(例如md C:\ blabla创建一个新目录C:\ blabla) 我的代码看起来像这样,它运行没有任何错误:使用apache commons运行简单的cmd.exe命令exec

import java.io.IOException; 
import org.apache.commons.exec.CommandLine; 
import org.apache.commons.exec.DefaultExecutor; 
import org.apache.commons.exec.ExecuteException; 

public class Test { 

    public static void main(String[] args) throws ExecuteException, IOException { 
     CommandLine cmdLine = new CommandLine("cmd.exe"); 
     cmdLine.addArgument("md"); 
     cmdLine.addArgument("C:\\blabla"); 
     DefaultExecutor executor = new DefaultExecutor(); 
     executor.execute(cmdLine); 
    } 
} 

但是,如果我去到C:\没有文件夹作为布拉布拉我所期望的,因为手动键入MD C:\布拉布拉输入cmd.exe正常工作。我也试过“C:\ Windows \ System32 \ cmd.exe”而不是“cmd.exe”,但没用。

在控制台输出看起来是这样的:

的Microsoft Windows [版本6.1.7601] 版权所有(C)2009年微软公司。版权所有。

C:\用户\ Selphiron \工作区\测试>

哪里错了吗?

回答

1

错误在于命令本身。试试你在命令行中做的事。

您的代码将诸如“cmd.exe md c:\ blabla”之类的东西传递给系统。这启动了一个新的shell。只是传递一个shell命令到cmd.exe并不能解决问题。尝试使用

cmd /c md c:\blabla 

/c在这里有所不同。

+0

Thx为您的答案。它工作,但令我惊讶的是,当我打开cmd.exe并键入md C:\ blabla时,新目录被创建(Windows 7 64位)。 反正谢谢:) – Selphiron 2014-11-05 16:25:01

+0

只要给''cmd.exe'作为参数的命令并不意味着cmd接受它并执行它。检查''cmd.exe /?''来检查参数的作用。 – f1sh 2014-11-05 19:22:20