Выход из пробелов в пути к файлам - PullRequest
7 голосов
/ 29 сентября 2011

Я пишу небольшое Java-приложение и у меня возникают проблемы с путем к файлу.

Я хочу выполнить командный файл с

Runtime.getRuntime().exec("cmd /c start c:\program files\folder\file.bat");

Но сейчасJava плачет из-за пробелов в пути к файлу.

Как мне избежать этого?

РЕДАКТИРОВАТЬ:

Хорошо, спасибо за ответы, ребята.Но я только что столкнулся с новой проблемой:

Если я запускаю .bat таким образом, он просто открывает окно cmd и ничего не происходит.Но если я переместлю .bat в папку c: / без пробелов, это сработает ... и сам .bat тоже подойдет.

Ответы [ 8 ]

9 голосов
/ 29 сентября 2011

Вы можете избежать подобных проблем, используя Runtime # exec , который принимает строку []:

Runtime.getRuntime().exec(new String[] {"cmd", "/c", "start", "c:\\program files\\folder\\file.bat"});

Таким образом, вам не нужно беспокоиться о цитированииимена файлов.Однако вам все равно придется беспокоиться о цитировании \ в именах файлов.

1 голос
/ 13 февраля 2014

Решение для Windows 7 как минимум:

    Runtime.getRuntime().exec("my_program_name.exe \"" + namefile+"\");

Идея состоит в том, чтобы поместить имя файла между символами ".

1 голос
/ 29 сентября 2011

Вместо использования Runtime.getRuntime лучше использовать ProcessBuilder

Таким образом, вы можете получить что-то вроде:

List<String> command = new ArrayList<String>();
command.add("first-arg");
command.add("second arg with spaces") //this one will be accepted as a single argument,   eventhough it has spaces
0 голосов
/ 29 сентября 2011

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

0 голосов
/ 29 сентября 2011
Runtime.getRuntime().exec("cmd /c start \"c:/program files/folder/file.bat\"");

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

0 голосов
/ 29 сентября 2011

окружите путь к файлу "

Runtime.getRuntime().exec("cmd /c start \"c:\\program files\\folder\\file.bat\"");

и, соответственно, экранируйте \ в пути

0 голосов
/ 29 сентября 2011

Размещайте кавычки и ставьте обратную косую черту:

Runtime.getRuntime().exec("cmd /c start \"c:\\program files\\folder\\file.bat\"");
0 голосов
/ 29 сентября 2011

Я думаю, что он плачет из-за неконтролируемой обратной косой черты в твоей струне. Укажите имя файла.

...