Аргументы командной строки для exe

У меня небольшая проблема с строками Powershell. Существует Java-программа, которую я называю SymmetricDS, которая принимает аргументы в пакетном файле Windows для определенных административных функций. Один из них - открыть регистрацию для node, передав строку, содержащую группу node и id:

& .\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?

Решено: ответ zdan работает, как и обманывает Powershell немного так:

.\bin\sym.bat -p symmetric.properties --open-registration '"store,01"'

Ответ 1

Это не проблема с юникодом. Вы спотыкаетесь с парсером PowerShell. Когда вы вызываете оператор вызова, powershell анализирует остальные ваши аргументы, а затем передает их в script, который вы вызываете. Одиночные кавычки вокруг строки "store, 01" эффективно делятся и интерпретируются как список, который разложен на два отдельных аргумента.

Просто запустите cmd.exe напрямую, внимательно цитируя строку команд:

 cmd.exe /c ' .\sym.bat -p symmetric.properties --open-registration "store,01" '

Обратите внимание, что вы должны передать команду cmd.exe как одну строку, иначе она будет проанализирована с помощью powershell.