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.
私が十分な情報を提供したことを望みます。そうでない場合はお知らせください。
FOR /F
ループを使用してtestservers.txtのテキストドキュメントコンテンツを読み取るため、単に「TOKENS=1,*
"と最初のトークンは、各行のサーバー名またはIPアドレスになり、次のトークンは、その後の各行の残りの部分になります。
つまり、FOR /F
ループの次のトークンを利用して、最初のトークンの後の各行の残りの部分を取得し、それを%OUTPUT_FILE%
のECHO
行に追加できます。
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 /?
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.