0

我是这个委员会和批处理文件编程的新成员——你好!

几天来,我尝试了以下脚本,结果喜忧参半:

@Echo 关闭

FOR /f "tokens=3 delims=^:^(" %%G In ('PING "hostname.com"') DO (Echo %%G)

该脚本的目的是 ping 主机并从 Ping 摘要中解析出(N% loss)中的数字(N)。脚本会这样做,但我得到的不是数字,而是“N% loss)”,而不仅仅是整数。我很好奇为什么会发生这种情况以及如何使脚本只输出百分比的整数而不输出其他字符。这个批处理文件在Win7下运行

4

2 回答 2

2

括号给你带来了麻烦。但在我们开始之前......你刚刚所做的事情恰好在工作,因为在你感兴趣的那一行之后没有行中有一个“:”。我会通过使用 FIND 进行区分,以便我们只检查带有单词“loss”(不区分大小写)的行。“usebackq”是必要的,因为我们在命令中使用引号。下面的“SET Scratch”行去掉了括号。

@Echo OFF
FOR /f "usebackq tokens=3* delims==" %%G In (`PING hostname.com ^| FIND /I "loss"`) DO SET Scratch=%%H
SET Scratch=%Scratch:(=%
SET Scratch=%Scratch:)=%
FOR /f "tokens=2" %%G In ('echo.%Scratch%') DO SET Percent=%%G
ECHO.%Percent:~0,-1%
于 2013-03-21T01:38:27.580 回答
2
FOR /f "tokens=3 delims=:(%%" %%G In ('PING "hostname.com"') DO (Echo %%G)

几乎不需要转义说明符中的任何字符delims,除了%通过加倍转义的字符 - 插入符号 ( ^) 不起作用。

哦——为什么?

如果该行被解析,包括 ONLY(:作为分隔符,则该行

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

有令牌

  1. Packets
  2. Sent = 4, Received = 4, Lost = 0
  3. 0% loss),
于 2013-03-21T01:38:35.270 回答