Проблема с выполнением командного файла в Java - PullRequest
0 голосов
/ 10 сентября 2010

Я пытаюсь выполнить командный файл в моем приложении Java. Код следующий:

Runtime.getRuntime().exec("cmd /C start C:/Documents and Settings/Zatko/My Documents/Project-Workspace/IUG/external/apps/archive/run-server.bat");

При запуске появляется диалоговое окно с сообщением об ошибке: «Windows не может найти« C: / Documents ». Убедитесь, что вы правильно ввели имя…»

Когда я выполняю с тем же кодом другой пакетный файл с именем file.bat, расположенный в папке C: / Temp, он отлично работает ....

Кто-нибудь знает, где может быть проблема? Речь идет о пробелах?

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 22 июня 2011
Runtime.getRuntime().exec("cmd /C start \"\" \"C:/Documents and Settings/Zatko/My Documents/Project-Workspace/IUG/external/apps/archive/run-server.bat\"");

должно работать.

Вы должны заключать аргументы в кавычки с пробелами или метасимволами в них. И start ожидает, что первый аргумент в кавычках будет заголовком окна, поэтому оставьте его пустым, чтобы он был счастлив.

2 голосов
/ 10 сентября 2010

Гораздо лучше использовать массив:

String[] array = { ... };
Runtime.getRuntime().exec(array);

, как в

String[] array = { "cmd", "/C", "start", 
    "C:/Documents and Settings/Zatko/My Documents/.../run-server.bat" };
Runtime.getRuntime().exec(array);

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

2 голосов
/ 10 сентября 2010

Редактировать:

Кажется, команда запуска нуждается в дополнительном параметре всякий раз, когда путь к исполняемому файлу для запуска заключен в ". Поскольку необходимо окружить параметры, содержащие пробелы", это немного сбивает с толкустартовая команда работает как исключение, когда есть путь без пробелов, и поэтому не заключает его в ". Это то, что произошло, когда я проверил приведенный ниже код для папки c: / temp, и он работал без дополнительного параметра.

Ответственный параметр - это заголовок открываемого окна. Он должен иметь второй параметр, и если он содержит пробелы, должен быть заключен в ".

. Я предлагаю всегда использовать" как для заголовка, так и для пути..

Итак, вот обновленная команда:

Вам необходимо приложить

c: / Document and Settings /...

с "в качестве имени файла содержит пробелы.И вам нужно включить заголовок при использовании команды запуска с параметром с ".

Для Java это будет:

Runtime.getRuntime (). Exec (" cmd /C start \ "Сервер \" \ "C: / Документы и настройки / Zatko / Мои документы / Рабочая область проекта / IUG / external / apps / archive / run-server.bat \" ");

Greetz, GHad

0 голосов
/ 21 июня 2011

Это работает:

List<String> templst = new ArrayList<String>();

templst.add("cmd");

templst.add("/C");

templst.add("start");

templst.add("backup.bat");

Process p = rt.exec(templst.toArray(new String[]{}), null, new File(path));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...