2

Я хочу пинговать список IP-адресов со строкой текста, введенной рядом с ним. Текст будет состоять из нескольких слов и иметь цифры. Все IP-адреса начинаются с 10.xxx

Это сценарий, который я изучал, но он пытается определить IP-адрес IP, который я в него вставил. Я думаю, это будет работать, если я добавлю имена хостов туда. Может быть, я должен держать это там на всякий случай.

@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%
)

Что я действительно хочу, так это иметь текстовую строку типа "Это XYZ сервера", которая должна быть конкатенирована в конце строки для файла result.txt .

Так что мой файл testservers.txt будет выглядеть так:

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.

Когда я запускаю его сейчас, результаты выкладываются в файл 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

Тогда файл result.txt будет выглядеть так:

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.

Надеюсь, я предоставил достаточно информации. Дайте мне знать, если я не сделал.

1 ответ1

2

Поскольку вы используете цикл FOR /F для чтения содержимого текстового документа testservers.txt, вы можете просто добавить « TOKENS=1,* », и первым токеном будет имя сервера или IP-адрес для каждой строки и следующим токеном будет оставшаяся часть каждой строки после этого.

Это означает, что вы можете использовать следующий токен цикла FOR /F чтобы получить оставшуюся часть каждой строки после первого токена и добавить его к строке ECHO для %OUTPUT_FILE% .

testservers.txt


Пример скрипта

@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%
)

Выходные результаты

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. 

Дополнительные ресурсы

  • 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.
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .