FOR/f解析但包含不需要的字符。

问题描述:

我是这个委员会的最近成员和一般的批处理文件编程---你好!FOR/f解析但包含不需要的字符。

对于几天我试图用混合成功下面的脚本:

@Echo OFF

FOR/F “令牌= 3个delims = ^:^(” %%克('PING “hostname.com”)DO(Echo %% G)

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

+0

如果您使用Win7,请使用PowerShell而不是批处理脚本。 – SecurityMatt 2013-03-21 00:29:22

+0

请显示'PING“hostname.com的输出,这取决于国际设置。 – Endoro 2013-03-21 01:05:47

这些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% 
+0

谢谢---我将试验这个适用于其他应用程序的升技。 – MSQ16 2013-03-21 02:04:04

+0

您可以通过'find'%''替换'find/I'丢失''来使这种语言无关。“#: – Stephan 2013-03-21 08:35:15

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

有没有必要逃避几乎在delims符的任何字符,除了%这是通过加倍逃脱 - 插入符号(^)不起作用。

哦 - 为什么?

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

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

具有令牌

  1. Packets
  2. Sent = 4, Received = 4, Lost = 0
  3. 0% loss),
+0

Thank you,that kind of valuable and instructional。 – MSQ16 2013-03-21 02:05:07