通过 Java 运行 cmd 命令

新手上路,请多包涵

我找到了几个通过 Java 类运行 cmd 命令的代码片段,但我无法理解它。

这是打开cmd的代码

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

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我发现了一些其他链接用于添加其他命令,例如 cd http://www.coderanch.com/t/109753/Linux-UNIX/exec-command-cd-command-java

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

任何人都可以帮助我了解如何 cd 一个目录,例如:

  cd C:\Program Files\Flowella

然后在该目录上运行其他命令?

原文由 Reham 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 807
2 个回答

从不同目录运行进程到 Java 程序的工作目录的一种方法是更改目录,然后在同一命令行中运行进程。您可以通过获取 cmd.exe 运行命令行(例如 cd some_directory && some_program )来执行此操作。

以下示例更改为不同的目录并从那里运行 dir 。不可否认,我可以只 dir 那个目录而不需要 cd 到它,但这只是一个例子:

 import java.io.*;

public class CmdTest {
    public static void main(String[] args) throws Exception {
        ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "cd \"C:\\Program Files\\Microsoft SQL Server\" && dir");
        builder.redirectErrorStream(true);
        Process p = builder.start();
        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while (true) {
            line = r.readLine();
            if (line == null) { break; }
            System.out.println(line);
        }
    }
}

另请注意,我正在使用 ProcessBuilder 来运行命令。除此之外,这允许我通过调用 redirectErrorStream(true) 将进程的标准错误重定向到它的标准输出。这样做只给我一个可供阅读的流。

这在我的机器上提供了以下输出:

 C:\Users\Luke\StackOverflow>java CmdTest
 Volume in drive C is Windows7
 Volume Serial Number is D8F0-C934

 Directory of C:\Program Files\Microsoft SQL Server

29/07/2011  11:03    <DIR>          .
29/07/2011  11:03    <DIR>          ..
21/01/2011  20:37    <DIR>          100
21/01/2011  20:35    <DIR>          80
21/01/2011  20:35    <DIR>          90
21/01/2011  20:39    <DIR>          MSSQL10_50.SQLEXPRESS
               0 File(s)              0 bytes
               6 Dir(s)  209,496,424,448 bytes free

原文由 Luke Woodward 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以试试这个:-

 Process p = Runtime.getRuntime().exec(command);

原文由 Rahul Tripathi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题