从Java打开CMD时,无法更改目录

时间:2018-08-29 08:56:04

标签: java batch-file cmd

我的Java程序有问题,我有一个按钮可以打开命令提示符并打开批处理文件以运行一系列命令。为此,我需要更改目录。 这是我的代码:

private void CommandPromptButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                    
    try {
        new java.lang.ProcessBuilder("cmd.exe").start();
        java.lang.Runtime.getRuntime().exec(new String[]{
            //I need to change the directory in command prompt and I do not want to use escape
            "cmd.exe","/c","start","cd C:\Users\Faz"
        });

    } catch (IOException ex) {
        Logger.getLogger(TMISGUIInstallerPage.class.getName()).log(Level.SEVERE, null, ex);
    }
}      

任何建议都值得赞赏。

4 个答案:

答案 0 :(得分:1)

以下代码应正常工作

Process p = Runtime.getRuntime().exec("cmd.exe /c start cd \"C:\\Users\\Faz\" && dir");

答案 1 :(得分:0)

您可以使用ProcessBuilder更改ProcessBuilder#directory()中的目录,然后使用start进行更改。这是示例代码:

ProcessBuilder start = new ProcessBuilder("cmd.exe", "/c", "start");
        start.directory(new File("C:\\Users"));
        start.start();

答案 2 :(得分:0)

支持Aukta的答案,它应该可以解决您的问题。

但是,正如您所问的那样:

  

为此,我需要更改目录。

实际上,使用ProcessBuilder及其directory(File directory),我们可以轻松地设置工作目录。这是一个简单的演示,列出了指定目录中的所有文件,以向您展示如何使用它。

public static void main(String... args) {
    ProcessBuilder processBuilder = new ProcessBuilder("ls"); // pass in your command and options;
    processBuilder.directory(new File("/home")); // specify you directory here;
    try {
        Process process = processBuilder.start();
        String line = null;
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        while((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException ignored) {
        ignored.printStackTrace();
    }
}

输出:

gitlab-runner
hearen
ubuntu

答案 3 :(得分:0)

感谢您的所有帮助和建议。我终于找到了答案。我忘了补充一点,我尝试使用Java运行时,但是不能运行所有命令。我发现如果添加另一个引号,则可以更改目录。

private void CommandPromptButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                    
try {
    new java.lang.ProcessBuilder("cmd.exe").start();
    java.lang.Runtime.getRuntime().exec(new String[]{
        //I need to change the directory in command prompt and I do not want to use escape
        "cmd.exe","/c","start","cd C:\"Users\"Faz"
    });

} catch (IOException ex) {
    Logger.getLogger(TMISGUIInstallerPage.class.getName()).log(Level.SEVERE, null, ex);
}

}

感谢您的所有帮助。概率问题稍后再提出一些问题。干杯!