我需要在包含双冒号的DOS批处理文件中运行命令并将输出设置为变量。喜欢这个
set /a TDR = C:\InCharge\CONSOLE\smarts\bin\dmctl -s SSA-SAM invoke SM_System::SM-System nameToAddr %SM_OBJ_InstanceName%
我不断收到“失踪的操作员”。我认为这是由于那些双冒号。我怎么逃避这些?我试过反斜杠但是没用。我已经尝试将整个命令放在双引号中,但也没有用。
我可以自己运行命令,即没有“set / a TDR”并且输出正确。但我需要使用该输出作为变量的值,因此“set / a”
dmctl的正常输出是这个
{ "10.28.112.74" }
我正在使用dmctl获取主机名的IP地址。我想,一旦我得到了输出,我就可以去除括号和引号,但我还没弄明白如何获取输出。
提前谢谢。
答案 0 :(得分:1)
冒号不需要逃脱。有关需要转义哪些字符以及如何转义它们的详细信息,请参阅Batch files - Escape Characters。
正在返回“缺少运算符”,因为SET /A
仅适用于算术运算,因此它正在寻找算术运算符。
要将命令的输出分配给变量,必须使用FOR命令,类似于以下内容:
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找到了这个。