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

How do you escape a double-colon in a DOS batch file?

我需要 运行 DOS 批处理文件中包含双冒号的命令并将输出设置为变量。像这样

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

我不断收到 "Missing operator"。我认为这是由于那些双冒号。我该如何逃避这些?我试过反斜杠,但没有用。我试过将整个命令放在双引号中,但也没有用。

我可以 运行 命令本身,即没有 "set /a TDR" 并且输出是正确的。但是我需要将该输出用作变量的值,因此 "set /a"

dmctl 的正常输出是这样的

{ "10.28.112.74" }

我正在使用 dmctl 获取主机名的 IP 地址。我想一旦我得到输出我就可以去掉括号和引号,但我还没有想出如何获取输出。

提前致谢。

冒号不需要转义。有关哪些字符需要转义以及如何转义的详细信息,请参阅 Batch files - Escape Characters

"Missing operator" 被返回是因为 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

至trim字符串首尾3个字符:

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

这将删除输出中分隔 IP 地址的花括号、空格和引号。

我在 DOS - String Manipulation 找到了这个。