java - 通过 Java 运行 cmd 命令

标签 java cmd cd

我找到了几个通过 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

How to open the command prompt and insert commands using Java?

谁能帮我理解如何 cd 一个目录,例如:

 cd C:\Program Files\Flowella

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

最佳答案

将进程从不同目录运行到 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

关于java - 通过 Java 运行 cmd 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464111/

相关文章:

python - 在 Python 中更改调用者的当前工作目录

shell - ubuntu 中的 "CD"不工作,即使是 root

java - 如何在自己的线程中启动 JavaFX GUI

java - 使用 Jackson 反序列化时如何放宽命名策略?

java - 在 Java 中测试素数 - 添加附加条件

windows - Windows命令在cmd中工作,但不是.bat文件

python - 使用 bat 文件运行 python 但 'python is not recognized as internal.....'

bash - 自定义 cd 命令

java - 当我点击图像时如何使图像消失?

windows - 如何在 Windows 脚本中获取最近(按创建时间)目录的名称?