web-dev-qa-db-ja.com

txtファイルにリストされている名前の文字列を使用してIPのリストにpingを実行し、バッチを使用する必要があります

IPのリストの横にテキストの文字列を入力してpingを実行したいと思います。テキストは複数の単語になり、数字が表示されます。 IPはすべて10.x.x.xで始まります。

これは私が調べていたスクリプトですが、入力した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%
)

私が本当に必要としているのは、「This is the Server 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.

私が十分な情報を提供したことを望みます。そうでない場合はお知らせください。

2
rockower

FOR /Fループを使用してtestservers.txtのテキストドキュメントコンテンツを読み取るため、単に「TOKENS=1,* "と最初のトークンは、各行のサーバー名またはIPアドレスになり、次のトークンは、その後の各行の残りの部分になります。

つまり、FOR /Fループの次のトークンを利用して、最初のトークンの後の各行の残りの部分を取得し、それを%OUTPUT_FILE%ECHO行に追加できます。

testservers.txt

enter image description here


スクリプト例

@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.
    
2
Pimp Juice IT