如何在DOS批处理文件中转义双冒号?

时间:2015-05-26 17:17:44

标签: batch-file escaping dos

我需要在包含双冒号的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地址。我想,一旦我得到了输出,我就可以去除括号和引号,但我还没弄明白如何获取输出。

提前谢谢。

1 个答案:

答案 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找到了这个。