Я потратил некоторое время на поиск в SO и более широком Интернете и собирался опубликовать этот вопрос как новый вопрос, когда натолкнулся на него, который, похоже, идентичен моей проблеме ...
Я пытаюсь вызвать пакетный файл Windows из Java. Пакетный файл принимает несколько аргументов, но только первый, который является путем к файлу данных, имеет отношение к этой проблеме. Сокращенная командная строка, с которой я экспериментировал, по сути:
cmd /c c:\path\to\my\batchfile.bat c:\path\to\my\datafile.mdl
Я использую Apache Commons Exec, который в конечном итоге делегирует Runtime.getRuntime().exec(String[] cmdarray, String[] envp, File dir)
, «правильную» версию, в отличие от перегруженных версий, принимающих одну команду String
. Таким образом, процитирование аргументов, когда они содержат пробелы, выполняется.
Теперь и путь к пакетному файлу, и / или путь к файлу данных могут содержать пробелы. Если или путь к пакетному файлу или путь к файлу данных содержат пробелы, то пакетный файл выполняется. Но если оба содержат пробелы, то путь к пакетному файлу усекается в первом пробеле.
Это должно быть (Java или Windows?) Ошибка, верно? Я отлаживал прямо до нативного вызова create()
в java.lang.ProcessImpl
, и все, кажется, в порядке. Я на JDK 1.6.