FOR/f解析但包含不需要的字符。
我是这个委员会的最近成员和一般的批处理文件编程---你好!FOR/f解析但包含不需要的字符。
对于几天我试图用混合成功下面的脚本:
@Echo OFF
FOR/F “令牌= 3个delims = ^:^(” %%克('PING “hostname.com”)DO(Echo %% G)
该脚本的目的是ping主机并从Ping摘要中解析(N%损失)中的数字(N)。脚本是这样做的,但不是一个数字,我会得到“N%损失”,“而不仅仅是整数。我很好奇为什么会发生这种情况,以及如何让脚本只输出百分比的整数,而不输出其他字符。此批处理文件在Win7下运行
这些parens正在为您造成问题。 但是在我们做到这一点之前......你碰巧正在努力工作,因为在你感兴趣的那一行后面没有行,其中有一个“:”。我将通过使用FIND来区分,以便我们仅检查带有“损失”(不区分大小写)的单词。 “usebackq”是必需的,因为我们在命令中使用了引号。 下面的“SET Scratch”行删除了parens。
@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%
FOR /f "tokens=3 delims=:(%%" %%G In ('PING "hostname.com"') DO (Echo %%G)
有没有必要逃避几乎在delims
符的任何字符,除了%
这是通过加倍逃脱 - 插入符号(^
)不起作用。
哦 - 为什么?
如果该行被解析仅包括(
和:
作为分隔符,则该行
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
具有令牌
Packets
Sent = 4, Received = 4, Lost = 0
0% loss),
Thank you,that kind of valuable and instructional。 – MSQ16 2013-03-21 02:05:07
如果您使用Win7,请使用PowerShell而不是批处理脚本。 – SecurityMatt 2013-03-21 00:29:22
请显示'PING“hostname.com的输出,这取决于国际设置。 – Endoro 2013-03-21 01:05:47