Аргументы командной строки для exe
У меня небольшая проблема со строками Powershell. Я использую программу Java под названием SymmetricDS, которая принимает аргументы в командный файл Windows для определенных административных функций. Одним из них является открытие регистрации для узла, передавая строку, содержащую группу узла и идентификатор:
& .\bin\sym.bat -p symmetric.properties --open-registration 'store,01'
В командном файле вызывается java, а свойства, которые я передал выше, передаются следующим образом:
java -Dthis -Dthat -Dfoo -Dbar %1 %2 %3 %4 %5 %6 %7 %8 %9
Функция в самой java перестает работать после этой части:
int index = argument.trim().indexOf(",");
if (index < 0) {
throw new SymmetricException("LauncherMissingFilenameTriggerSQL", OPTION_OPEN_REGISTRATION);
}
index
по-видимому, это -1. Почему не найти запятую, я не знаю. Я просто знаю, что когда я запускаю то же самое в файле.cmd или.bat, он работает просто отлично:
.\bin\sym.bat -p symmetric.properties --open-registration "store,01"
Я подозреваю, что это как-то связано с тем, что строка Powershell является Unicode, и что-то нехорошее случается в их путешествии оттуда в пакетный файл, а затем в Java.
Кто-нибудь знает, как я могу назвать это прямо в Powershell?
Решено: ответ Здана работает так же, как обмануть Powershell немного так:
.\bin\sym.bat -p symmetric.properties --open-registration '"store,01"'
1 ответ
Это не проблема Unicode. Ты спотыкаешься о парсере powershell. Когда вы вызываете оператор вызова, powershell анализирует остальные аргументы и затем передает их вызываемому скрипту. Одинарные кавычки вокруг строки "store,01" эффективно удаляются и интерпретируются как список, который расширяется в два отдельных аргумента.
Просто запустите cmd.exe, аккуратно цитируя командную строку:
cmd.exe /c ' .\sym.bat -p symmetric.properties --open-registration "store,01" '
Обратите внимание, что вы должны передать команду cmd.exe в виде одной строки, иначе она будет проанализирована powershell.