2013-03-21 36 views
0

我是這個委員會的最近成員和一般的批處理文件編程---你好!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

回答

1

這些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

1
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

相關問題