Когда я открываю CMD из Java, я не могу изменить каталог - PullRequest
0 голосов
/ 29 августа 2018

У меня проблема с моей программой на 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 голосов
/ 29 августа 2018

Спасибо за вашу помощь и предложения. Я наконец нашел ответ. Я забыл добавить, что я пытался использовать среду выполнения 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);
}

}

Спасибо за вашу помощь. Зонды отправляют еще несколько вопросов позже. Ура! * * 1006

0 голосов
/ 29 августа 2018

Вы можете изменить каталог в ProcessBuilder, используя ProcessBuilder#directory(), а затем start процесс. Вот пример кода:

ProcessBuilder start = new ProcessBuilder("cmd.exe", "/c", "start");
        start.directory(new File("C:\\Users"));
        start.start();
0 голосов
/ 29 августа 2018

Ответ Аукта Upvoted, это должно решить вашу проблему.

Но как вы и просили:

Для этого мне нужно сменить каталог.

На самом деле с 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
0 голосов
/ 29 августа 2018

Следующий код должен работать

Process p = Runtime.getRuntime().exec("cmd.exe /c start cd \"C:\\Users\\Faz\" && dir");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...