Аргументы командной строки для 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.

Другие вопросы по тегам