Аргументы командной строки для exe - PullRequest
3 голосов
/ 13 декабря 2010

У меня небольшая проблема со строками 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 Ответ

4 голосов
/ 14 декабря 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...