Одна вложенная кавычка \ "для команды и имени файла, вторая кавычка \" для самого имени файла, для пробелов и т. Д., В частности, в имени.

ли открыть командную строку (и я предполагаю, что любой другой терминал для других систем) и выполнять команды в только что открывшемся окне?

В настоящее время у меня есть это:

Runtime rt = Runtime.getRuntime();
rt.exec(new String[]{"cmd.exe","/c","start"});

Я попытался добавить следующую команду после «запуска», я попытался запустить другой rt.exec, содержащий мою команду, но я не могу найти способ заставить ее работать.

Если это имеет значение, я пытаюсь запустить команду, подобную этой:

java -flag -flag -cp terminal-based-program.jar

РЕДАКТИРОВАТЬ К сожалению, у меня были странные результаты. Я был в состоянии успешно запустить командную строку и передать команду, используя это:

rt.exec("cmd.exe /c start command");

Однако кажется, что он работает только с одной командой. Потому что, если я попытаюсь использовать такой разделитель команд, как «cmd.exe / c start command & command2», вторая команда будет проходить через фон (как если бы я просто использовал rt.exec («command2»);) , Теперь проблема в том, что я понял, что мне нужно изменить каталог, в котором запускается командная строка, потому что, если я просто использую полный путь к файлу jar, файл jar неправильно считывает данные из активного каталога командной строки, а не каталог фляги, который содержит его ресурсы.

 404 Not Found14 янв. 2011 г., 22:30
Смотрите комментарий, который я положил на ответ ktm5124.
 Konstantin Komissarchik14 янв. 2011 г., 06:12
Не могли бы вы уточнить, почему вы пытаетесь это сделать, а не просто запустить .exec в команде java. Командное окно откроется автоматически.

Ответы на вопрос(9)

поместите вашу команду в параметр, подобный указанному ниже.

Runtime.getRuntime().exec("cmd.exe /c start cmd /k \" parameter \"");

Runtime rt = Runtime.getRuntime();
String[] testArgs = {"touch", "TEST"};
rt.exec(testArgs);

Дело в том, что если вы хотите прочитать выходные данные этой команды, вам нужно прочитать входной поток процесса. Например,

Process pr = rt.exec(arguments);
BufferedReader r = new BufferedReader(new InputStreamReader(pr.getInputStream()));

Позволяет вам легко читать построчно вывод команды.

Проблема также может заключаться в том, что MS-DOS не интерпретирует ваш порядок аргументов в значении «начать новую командную строку». Ваш массив, вероятно, должен быть:

{"start", "cmd.exe", "\ c"}

Чтобы открыть команды в новой командной строке, вам нужно использовать ссылку «Процесс». Но я не уверен, почему вы захотите сделать это, когда вы можете просто использовать exec, как прокомментировал человек до меня.

 404 Not Found14 янв. 2011 г., 22:16
Причина, по которой я хочу открыть команды в новой командной строке, заключается в том, что программа, которую я пытаюсь запустить, представляет собой консольную программу с входными и выходными данными, поступающими и идущими на консоль соответственно. Обратите внимание, что программа, которую я пытаюсь запустить, не та, которую я создал, поэтому я должен программировать, основываясь на том, как она работает, я не могу ее изменить.

которую вы передаете.

String command = "cmd.exe /c start "+"*your command*";

Process child = Runtime.getRuntime().exec(command);

ога, в котором запускается командная строка, существует перегрузка для метода Runtime.exec, который позволяет указать текущий рабочий каталог. Подобно,

Runtime rt = Runtime.getRuntime();
rt.exec("cmd.exe /c start command", null, new File(newDir));

Это откроет командную строку в каталоге на newDir. Я думаю, что ваше решение также работает, но это делает вашу командную строку или массив немного чище.

Существует перегрузка для команды в виде строки и команды в виде массива String.

Возможно, вам будет даже проще использоватьProcessBuilder, который имеетdirectory метод для установки вашего текущего рабочего каталога.

Надеюсь это поможет.

 ChanGan02 апр. 2015 г., 10:05
Я использовал это, String newDir = "C: \\ Test \\ Application \\"; runtime.exec («cmd.exe / c start dir», null, new File (newDir)); в этой папке, если я хочу выполнить какую-то команду, C: \ Test \ Application \ avt install - filename .. как это сделать ?? Вы можете помочь мне в этом ??
 ChanGan02 апр. 2015 г., 10:02
это должен быть runtime.exec («cmd.exe / c start», null, new File (newDir));

\" (цитаты) осторожно. Параметр\k используется, чтобы оставить командную строку открытой после выполнения.

1) для объединения 2 команд используйте (напримерpause а такжеipconfig)

Runtime.getRuntime()
  .exec("cmd /c start cmd.exe /k \"pause && ipconfig\"", null, selectedFile.getParentFile());

2) показать содержимое файла использования (MORE средство просмотра командной строки в Windows)

File selectedFile = new File(pathToFile):
Runtime.getRuntime()
  .exec("cmd /c start cmd.exe /k \"MORE \"" + selectedFile.getName() + "\"\"", null, selectedFile.getParentFile());

Одна вложенная кавычка \ "для команды и имени файла, вторая кавычка \" для самого имени файла, для пробелов и т. Д., В частности, в имени.

public static void main(String[] args) {
    try {
        String ss = null;
        Process p = Runtime.getRuntime().exec("cmd.exe /c start dir ");
        BufferedWriter writeer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
        writeer.write("dir");
        writeer.flush();
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
        BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        System.out.println("Here is the standard output of the command:\n");
        while ((ss = stdInput.readLine()) != null) {
            System.out.println(ss);
        }
        System.out.println("Here is the standard error of the command (if any):\n");
        while ((ss = stdError.readLine()) != null) {
            System.out.println(ss);
        }

    } catch (IOException e) {
        System.out.println("FROM CATCH" + e.toString());
    }

}
 Aleksandr M20 окт. 2012 г., 00:48
Вы можете удалить ненужные комментарии из своего кода и добавить некоторые соответствующие.
Решение Вопроса

что люди рекомендуют держаться подальше от rt.exec (String), но это работает, и я не знаю, как преобразовать его в версию массива.

rt.exec("cmd.exe /c cd \""+new_dir+"\" & start cmd.exe /k \"java -flag -flag -cp terminal-based-program.jar\"");
 Ungeheuer03 авг. 2017 г., 06:17
Я работаю над тем, что вы делаете, и мне любопытно, откуда берутся / c и / k. Я не могу найти упоминание о них для CMD. Кроме того, почему вы избегаете кавычек? Это потому, что значения между ними представляют команду для передачи в CMD?
 404 Not Found09 авг. 2017 г., 20:35
cmd /? /C Carries out the command specified by string and then terminates /K Carries out the command specified by string but remains

й строке

Process p = Runtime.getRuntime().exec("cmd.exe /c start dir ");
Process p = Runtime.getRuntime().exec("cmd.exe /c start cd \"E:\\rakhee\\Obligation Extractions\" && dir");
Process p = Runtime.getRuntime().exec("cmd.exe /c start cd \"E:\\oxyzen-workspace\\BrightleafDesktop\\Obligation Extractions\" && dir");
String[] command = {"cmd.exe" , "/c", "start" , "cmd.exe" , "/k" , "\" dir && ipconfig 
\"" };
ProcessBuilder probuilder = new ProcessBuilder( command );
probuilder.directory(new File("D:\\Folder1"));
Process process = probuilder.start();

Ваш ответ на вопрос