【发布时间】:2018-02-04 13:36:49
【问题描述】:
主要问题:
ECHO 命令忽略标记参数之前的所有字符,并在输出中的标记之前插入标记参数之后的所有文本:
这是脚本:
@ECHO OFF
FOR /F "USEBACKQ TOKENS=2 DELIMS==" %%a IN (`
WMIC NIC WHERE
"MACAddress IS NOT NULL"
GET
MACAddress
/FORMAT:LIST ^|
FINDSTR /V /R "^%"
`) DO (
ECHO [%%a]
ECHO 0123456789%%a9876543210
)
PAUSE > NUL
这是预期的输出:
[AA:BB:CC:11:22:33]
0123456789AA:BB:CC:11:22:339876543210
这是实际输出:
]AA:BB:CC:11:22:33
9876543210AA:BB:CC:11:22:33
我为什么要关心?
我的意图是用这个块替换上面示例中的 DO () 块:
:: ...FOR LOOP STUFF...
`) DO (
WMIC NIC WHERE ^
"MACAddress=%%a" ^
GET ^
NetConnectionID ^
/FORMAT:LIST | FINDSTR /V /R "^$"
WMIC NICCONFIG WHERE ^
"MACAddress=%%a" ^
GET ^
DefaultIPGateway,^
DNSServerSearchOrder,^
IPAddress,^
IPSubnet,^
MacAddress ^
/FORMAT:LIST | FINDSTR /V /R "^$"
)
如上所述,处理脚本时,%%a 之前的所有字符都会被截断,%%a 之后的所有字符都会显示在 %%a 之前。有人请帮忙,我在这里象征性地哭泣。
【问题讨论】:
-
你能把它缩小到一个更简单的脚本吗?
-
好吧,我用 (`ECHO TEST`) 替换了反引号部分,并且输出如预期的那样是 [TEST]。所以看起来这个问题可能特定于 WMIC 输出。
-
我还用 FOR /F
"USEBACKQ TOKENS=*" %%a IN (`WMIC NIC GET MACAddress`)替换了开头部分,并观察到与第一个示例相同的输出问题。 -
这……很奇怪。就在我没有实际测试任何东西的情况下,我猜它可能与您正在使用的正则表达式字符串有关。
%符号需要在批处理脚本中加倍,因此请尝试使用findstr /V /R "^%%"。 -
wmic 有一个已知的错误,即输出带有 cr/cr/lf 序列的行。这里我不会使用 wmic 而是程序
Getmac.exe
标签: windows batch-file cmd echo token