Efetue ping de uma lista de IPs com strings de nomes listados em um arquivo txt e use batch

2

Eu quero pingar uma lista de IPs com uma string de texto inserida ao lado dele. O texto será várias palavras e terá números. Todos os IPs começam com 10.x.x.x.

Este é um script que eu estava procurando, mas ele tenta resolver o IP do IP que eu coloquei nele. Eu acho que funcionaria se eu colocasse os nomes de host lá. Talvez eu deva manter isso lá apenas no caso.

@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" %%x in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (
        if %%x==Pinging set SERVER_ADDRESS=%%y
        if %%x==Reply set SERVER_ADDRESS=%%z
        if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)
    )
    echo %%i [!SERVER_ADDRESS::=!] is !SERVER_STATE! >>%OUTPUT_FILE%
)

O que eu realmente quero é ter uma string de texto como "Este é o Servidor XYZ" a ser concatenado no final da linha para o arquivo result.txt .

Então, meu arquivo testservers.txt ficará assim:

10.0.0.1 This is the Server ABC.
10.0.0.2 This is the Server DEF.
hostname1 This is the Server LMN.
hostname2 This is the Server XYZ.

Quando eu o executo agora, ele gera resultados como esse no arquivo result.txt .

10.0.0.1 [10.0.0.1] is UP
10.0.0.1 [10.0.0.2] is UP
hostname1 [10.0.0.3] is UP
hostname2 [10.0.0.4] is UP

Em seguida, o arquivo result.txt ficaria assim:

10.0.0.1 [10.0.0.1] is UP This is the Server ABC.
10.0.0.2 [10.0.0.2] This is the Server DEF.
hostname1 [10.0.0.3] This is the Server LMN.
hostname2 [10.0.0.4] This is the Server XYZ.

Espero ter fornecido informações suficientes. Deixe-me saber se eu não soubesse.

    
por rockower 28.12.2017 / 23:54

1 resposta

1

Como você está usando um loop FOR /F para ler o conteúdo do documento de texto testservers.txt , você pode simplesmente adicionar " TOKENS=1,* " e o primeiro token será o nome do servidor ou endereço IP por cada linha e o próximo token será a parte restante de cada linha depois disso.

Isso significa que você pode utilizar o próximo token do loop FOR /F para obter a parte restante de cada linha após o primeiro token e anexá-la à linha ECHO do %OUTPUT_FILE% .

testservers.txt

enter image description here

Exemplo de script

@echo off
setlocal enabledelayedexpansion

set OUTPUT_FILE=result.txt
>nul copy nul %OUTPUT_FILE%
for /f "tokens=1,*" %%i in (testservers.txt) do (
    set SERVER_ADDRESS=ADDRESS N/A
    for /f "tokens=1,2,3" %%x in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (
        if %%x==Pinging set SERVER_ADDRESS=%%y
        if %%x==Reply set SERVER_ADDRESS=%%z
        if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)
    )
    echo %%i [!SERVER_ADDRESS::=!] is !SERVER_STATE! %%j >>%OUTPUT_FILE%
)

Resultados da saída

10.0.0.1 [10.0.0.1] is DOWN This is the Server ABC. 
10.0.0.2 [10.0.0.2] is DOWN This is the Server DEF. 
hostname1 [<IP Address>] is UP This is the Server LMN. 
hostname2 [<IP Address>] is UP This is the Server XYZ. 

Mais recursos

  • FOR / F

  • FOR /?

        tokens=x,y,m-n  - specifies which tokens from each line are to
                          be passed to the for body for each iteration.
                          This will cause additional variable names to
                          be allocated.  The m-n form is a range,
                          specifying the mth through the nth tokens.  If
                          the last character in the tokens= string is an
                          asterisk, then an additional variable is
                          allocated and receives the remaining text on
                          the line after the last token parsed.
    
por 01.01.2018 / 00:46