2013-05-08 28 views
3

我想要做的是基本讀取包含ping結果的文本文件,檢測某個字符串並將其複製到另一個文本文件中。我想要複製的字符串在示例中是粗體的。從文本文件中讀取一個字符串,並使用批處理文件將其複製到另一個文本文件中

Envoi D'UNE requte '平' 河畔star.c10r.facebook.com [31.13.81.17] AVEC 32個八位字節去donn,esÿ: R,ponse德31.13.81.17ÿ:八位字節= 32臨時工= 77毫秒TTL = 240

Statistiques平傾31.13.81.17: Paquetsÿ:特使,s = 1,再‡我們= 1,perdus = 0(perte 0%), Dur,e近似DES boucles en millisecondes: Minimum = 77ms,Maximum = 77ms,Moyenne = 77ms

我試圖執行這個程序,但變量「resultat」沒有出現在結果中。

@echo off 
setlocal enabledelayedexpansion 

set OUTPUT_FILE=result.txt 
>nul copy nul %OUTPUT_FILE% 

for /f %%i in (testservers.txt) do (
    set SERVER_ADDRESS=ADDRESS N/A 
    for /f "tokens=1,2,3,4" %%a in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (
     if %%a==R,ponse set resultat="%%b %%c %%d" 
     ) 

    echo %%i [!SERVER_ADDRESS::=!] is resultat >>%OUTPUT_FILE% 
) 

謝謝。

感謝@馬特的幫助下,我可以編輯我的代碼:

@echo off 
setlocal enabledelayedexpansion 

set OUTPUT_FILE=result.txt 

for /f %%i in (testservers.txt) do (
    if not exist %OUTPUT_FILE% type NUL>%OUTPUT_FILE% 
    for /f "tokens=2 delims=:" %%a in ('ping -n 1 %%i ^| find "TTL="') do (
    if errorlevel 0 set resultat=UP: %%a 
) 

    echo %%i is !resultat! >> %OUTPUT_FILE% 
    set resultat=DOWN 
) 

我「resultat」的默認值設置爲DOWN,因爲我注意到,如果「TTL」中找到它只會改變,這意味着服務器已啓動。如果沒有找到,程序會顯示「結果」的默認值爲DOWN。 「octets = 32 temps = 77 ms TTL = 240」部分只會在服務器啓動時顯示以顯示統計信息。結果是這樣的:

www.google.com是UP:八位字節= 32名臨時工= 470毫秒TTL = 42

www.facebook.com是UP:八位字節= 32名臨時工= 326毫秒TTL = 241
192.168.1.15是UP:八位字節= 32名臨時工<爲1ms TTL = 128
10.21.107.90爲Down

謝謝您的幫助。

+0

爲什麼這個'^&^&回聲SERVER_IS_UP'和'!SERVER_ADDRESS :: =!'?兩者都沒有影響。 – Endoro 2013-05-08 16:00:40

+0

@Endoro我刪除了這兩部分,因爲它們實際上沒有影響。謝謝。 – Ouss 2013-05-12 12:52:16

回答

1

我在這裏看到一些問題。在你說SERVER_IS_UP之前,你實際上並沒有檢查你的ping的返回情況,看它是否有效。您沒有正確使用SERVER_ADDRESS變量,並且沒有將結果作爲變量進行調用。

看看這是否修復它。

@echo off 
setlocal enabledelayedexpansion 

set OUTPUT_FILE=result.txt 

for /f %%i in (testservers.txt) do (
    if not exist %OUTPUT_FILE% type NUL>%OUTPUT_FILE% 
    set SERVER_ADDRESS=ADDRESS N/A 
    for /f "tokens=2 delims=:" %%a in ('ping -n 1 %%i ^| find "TTL="') do (
    if errorlevel 0 echo %%1 is up && set resultat=%%a 
    if errorlevel 1 echo %%i is down && set resultat=%%a is down 
) 

    echo %%i [!SERVER_ADDRESS!::=] is !resultat! >>%OUTPUT_FILE% 
    set resultat= 

+0

謝謝@Matt,你的回答幫了我很多忙,做了我想做的事情。關於您提出的程序,我想添加一些內容: - 對於變量「resultat」,它應該在每次迭代顯示後重置,因爲如果條件未被驗證,程序將顯示最後一個值「resultat 「過了。 - 我試圖在errorlevel不是0的情況下顯示「Server is Down」,但它不起作用,我不知道爲什麼。這裏是我試過的:「如果errorlevel 0(echo %% i是UP:%% a >>%OUTPUT_FILE%)else(echo %% i是DOWN:%% a >>%OUTPUT_FILE%)」 – Ouss 2013-05-10 08:43:14

+0

代碼已編輯。現在試試 – 2013-05-10 12:36:33

+0

謝謝@Matt。我編輯代碼,我寫在問題部分。您的評論非常有幫助。 – Ouss 2013-05-12 12:46:07

相關問題