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
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 /?
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.