Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我从Java打开CMD时,我无法更改目录_Java_Batch File_Cmd - Fatal编程技术网

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

当我从Java打开CMD时,我无法更改目录,java,batch-file,cmd,Java,Batch File,Cmd,我的Java程序有一个问题,我有一个按钮可以打开命令提示符并打开一个批处理文件来运行一系列命令。为此,我需要更改目录。 这是我的密码: private void CommandPromptButtonActionPerformed(java.awt.event.ActionEvent evt) { try { new java.lang.ProcessBuilder("

我的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);
    }
}      

任何建议和建议都将不胜感激。

以下代码应该可以工作

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

您可以使用ProcessBuilderdirectory更改ProcessBuilder中的目录,然后启动该进程。下面是一个示例代码:

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

对奥克塔的答案投了赞成票,它应该能解决你的问题

但正如你所问:

为此,我需要更改目录

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);
}
实际上,使用及其,我们可以轻松地设置工作目录。下面是一个简单的演示,列出指定目录中的所有文件,向您展示如何使用它

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

谢谢你的帮助和建议。我终于找到了答案。我忘了补充一点,我曾尝试使用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);
}
}


谢谢你的帮助。Probs稍后会提交更多问题。干杯

我不太清楚您的意思是不想使用转义符,但没有转义字符,C:\Users\Faz不是有效的Java字符串。@Gerhard Barnard使用\\\代替\\甚至不会编译,所以我没有理解您的编辑目的!。你在说什么?是你加的,不是我。我只是改变了你的代码格式。