2015-05-26 3 views
0

Мне нужно запустить команду в пакетном файле DOS, который содержит двойной двоеточие и установить выход в переменную. Нравится этимКак избежать двойной двоеточия в пакетном файле DOS?

set /a TDR = C:\InCharge\CONSOLE\smarts\bin\dmctl -s SSA-SAM invoke SM_System::SM-System nameToAddr %SM_OBJ_InstanceName% 

Я продолжаю получать «Отсутствующий оператор». Я предполагаю, что это связано с этими двойными двоеточиями. Как мне избежать этого? Я попробовал слэш, но это не сработало. Я попытался поместить всю команду в двойные кавычки, и это тоже не сработало.

Я могу выполнить команду самостоятельно, то есть без «set/tDR», и выход правильный. Но мне нужно использовать этот вывод в качестве значения переменной, следовательно, «установить/а»

Нормальный выход для dmctl это

{ "10.28.112.74" } 

Я использую dmctl, чтобы получить адрес IP-для имени хоста. Я понял, как только я получил вывод, я мог бы снять скобки и цитаты, но я не понял, как получить выход.

Заранее спасибо.

+0

Согласно http://ss64.com/nt/set.html, вы можете использовать/a для арифметических функций ... –

+0

Просьба предоставить образец вывода вашей команды 'dmctl'. Ваша проблема просто разрешима с помощью цикла 'for/F'. – JosefZ

ответ

1

Колонны не нуждаются в бегстве. См. Batch files - Escape Characters для получения подробной информации о том, какие символы должны быть экранированы, и как их избежать.

«Отсутствует оператор» возвращается, поскольку SET /A работает только с арифметическими операциями, поэтому он ищет арифметический оператор.

Чтобы назначить вывод команды в переменную, вы должны использовать для команды, похожее на следующее:

for /f "delims=" %%i in ('C:\InCharge\CONSOLE\smarts\bin\dmctl -s SSA-SAM invoke SM_System::SM-System nameToAddr %SM_OBJ_InstanceName%') do set myresult=%%i 

См Reading the output of a command into a batch file variable

Для обрезки 3 символов от начала и конца строки:

set mystring=%mystring:~3,-3% 

Это позволит удалить фигурные скобки, пробелы и кавычки, которые разграничивают IP-адрес на выходе.

Я нашел это на DOS - String Manipulation.

+0

Спасибо. Это хорошая рекомендация. См. Мое редактирование выше. Мне приходится снимать скобки и знаки кавычек. Я нахожу этот синтаксис «for/f» совершенно непонятным. Я - оболочка unix и perl-скрипт, и я не могу понять, что такое синтаксис dos. – april26

+1

Команда FOR - самая причудливая вещь. Я не рекомендую использовать его, если у них нет другого выбора. Powershell намного проще и мощнее ... –

Смежные вопросы