2013-05-08 2 views
3

기본적으로 ping 결과가 포함 된 텍스트 파일을 읽고 특정 문자열을 감지하여 다른 텍스트 파일에 복사합니다. 복사하려는 문자열은 예제의 굵은 글꼴입니다.텍스트 파일에서 문자열을 읽고 배치 파일을 사용하여 다른 텍스트 파일에 복사

ENVOI 디 UNE requte '핑'SUR star.c10r.facebook.com [31.13.81.17] AVEC 32 개 옥텟 드 donn,esÿ : R,ponse 드 31.13.81.17ÿ : = 32 옥텟 Paquetsÿ : 임시 직원 = 77 MS TTL = 240

Statistiques 핑 31.13.81.17 부어 다시 우리 ‡ = 1, perdus = 0 (perte 0 %), 특사의 ,s = 1, Dur,e approximative 데 boucles 최소 밀리 초 : 최소 = 77ms, 최대 = 77ms, 모이엔 = 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 
) 

나는 "TTL"가 발견 된 경우에만 변경됩니다 것으로 나타났습니다 때문에 나는, 아래에 "resultat"의 기본 값을 설정 :

감사 매트의 도움 @, 나는 내 코드를 편집 할 수 있습니다 즉 서버가 작동 중임을 의미합니다. 발견되지 않으면 프로그램은 DOWN 인 "resultat"의 기본값을 표시합니다. "octets = 32 temps = 77 ms TTL = 240"섹션은 서버가 통계를 표시하기 위해 UP으로 표시된 경우에만 표시됩니다.

www.google.com가 가동 : 옥텟 = 32 명 = 470, 임시 MS TTL = 42

www.facebook.com가 UP이다 옥텟 = 32 명 = 326, 임시는 MS 결과는 다음과 같이 인 TTL = 241
192.168.1.15은 UP입니다 : <이 1ms TTL = 128
10.21.107.90가 아래로

여러분의 도움에 감사드립니다 옥텟 = 32 개 임시 직원.

+0

왜 '^ &^& 에코 SERVER_IS_UP'와'!의 SERVER_ADDRESS :: =!'인가? 두 가지 모두 영향을주지 않습니다. – Endoro

+0

@Endoro 나는 두 부분을 삭제했다. 왜냐하면 사실 영향이 없기 때문이다. 고맙습니다. – Ouss

답변

1

여기에 몇 가지 문제가 있습니다. SERVER_IS_UP을 말하기 전에 실제로 핑의 반환 여부를 확인하는 것이 아닙니다. 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

+0

코드가 편집되었습니다. 지금 사용해보십시오 –

+0

@Matt에게 감사드립니다. 코드를 편집하여 질문 섹션에 썼습니다. 당신의 말은 매우 도움이되었습니다. – Ouss

관련 문제