如何从java更改cmd工作目录?

时间:2016-01-14 20:13:38

标签: java powershell cmd

我正在尝试执行不在默认工作目录中的bat文件(来自java内)。我尝试了下面的代码,但它似乎不适用于“CD”命令。

    String executeCommand(String command) {

    StringBuffer output = new StringBuffer();

    Process p;
    try {

        p = Runtime.getRuntime().exec(command);
        p.waitFor();
        BufferedReader reader =
                new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line = "";
        while ((line = reader.readLine())!= null) {
            output.append(line + "\n");
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return output.toString();

}

/////////////////////////////////////////////// ////////// 这是应该执行命令的代码 ////////////////////////////////////////////////// //////

    String command = "cd C:\usmt" ;

    //in windows
    //String command = "ping -n 3 " + domainName;

    String output = obj.executeCommand(command);

    System.out.println(output);

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

public class CmdTest {
    public static void main(String[] args) throws Exception {
        ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "cd \"C:\\Program Files\\myfile.txt");
        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);
        }
    }
}

如果您尝试在没有CD的情况下执行此操作,请使用:

 ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "C:\\Program Files\\myfile.txt");

答案 1 :(得分:0)

这取决于你想要完成的任务。如果你想让你的java程序有一个新的CWD,那么你将做一件事。如果你想执行一个子shell(正如另一个答案所假设的那样),你可以做那个答案所说的。

我会假设前者。每个Windows进程都有自己的CWD。如果您生成一个更改其CWD的进程,则生成进程不受影响。

用于更改进程'CWD的Win32 API为SetCurrentDirectory。我对Java知之甚少,我早就忘记了。也许java有一个在其实现中调用SetCurrentDirectory的API。或者,如果java具有类似.NET P / Invoke(托管代码调用非托管API的方式),则可以使用它。