NETSHコマンドで取得したIPアドレスを変数に入れて判別するバッチファイルを作る方法

NETSHコマンドで表示されるIPアドレスの情報を変数に入れて命令を分岐させるバッチファイルのメモ。

現在のIPアドレスを取得して命令を分けたい

バッチファイルでPCをメンテナンスする際、メンテナンスするPCが属しているネットワークの系統別に命令を分岐したいなと思うことがあったのでチャレンジしてみました。それには現在のIPアドレスがどうなっているのか調べ、その値を変数に入れ、IF文で分岐する必要があります。

まずはNETSHコマンドで表示される値を確認

コマンドプロンプトで以下のコマンドと打って Enter を押すと現在のIPアドレスが表示されます。ここで表示されるIPアドレスを変数に入れたいと思います。

Windows 10 の場合

netsh interface ipv4 show address "イーサネット"

netsh interface ipv4 show address "イーサネット"

Windows 7 の場合

Windows 7 の場合は "イーサネット" の部分を "ローカル エリア接続" に変更しないと表示されません。

netsh interface ipv4 show address "ローカル エリア接続"

netsh interface ipv4 show address "ローカル エリア接続"

それでもうまく表示されない場合は "ローカル エリア接続" の部分を削除して実行して接続名を確認し、表示された接続名に書き直して再度実行してみてください。

netsh interface ipv4 show address

"IP アドレス" の部分だけ表示したいとき

netsh interface ipv4 show address "イーサネット" | find "IP アドレス"

netsh interface ipv4 show address "イーサネット" | find "IP アドレス"

Windows 7 の場合は "イーサネット" の部分を "ローカル エリア接続" に変更しないと表示されません。

IPアドレスを変数に入れて命令を分岐するバッチファイル例

もし、取得したIPアドレスが「192.168.」から始まるアドレスかどうかで命令を分岐するバッチファイルの例です。

Windows 10 や Windows 7 で異なるインターフェースの構成が "イーサネット" か "ローカル エリア接続" のどちらになっているかも判別するのも加えているので、どちらのOSでも使えるバッチファイルになっています。

@echo off
rem #遅延環境変数
setlocal enabledelayedexpansion
rem #インターフェースの構成が"イーサネット"か調べる
for /f "tokens=1,2* usebackq delims=^:" %%i in (`netsh interface ipv4 show address ^| findstr "イーサネット"`) do @set INTERFACE="イーサネット"
rem #インターフェースの構成が"ローカル エリア接続"か調べる
for /f "tokens=1,2* usebackq delims=^:" %%i in (`netsh interface ipv4 show address ^| findstr "ローカル エリア接続"`) do @set INTERFACE="ローカル エリア接続"
if !INTERFACE! == "イーサネット" (
goto SearchIP
) else if !INTERFACE! == "ローカル エリア接続" (
goto SearchIP
)
goto Unknown
:SearchIP
rem #IPアドレスを調べる
for /f "tokens=1,2* usebackq delims=^:" %%i in (`netsh interface ipv4 show address !INTERFACE! ^| findstr "IP アドレス" ^| findstr /n /r "."`) do @set IP=%%k
rem #取得したIPアドレス前後のスペースを削除
call :Trim %IP%
rem #192.168.から始まるIPアドレスか判別
echo.
echo %IP% | findstr /B 192.168. > nul
if %ERRORLEVEL% equ 0 (
echo IPアドレスは%IP%です。
) else (
echo 192.168.から始まるIPアドレスではありません。
)
echo.
goto End
:Unknown
echo.
echo インターフェースの構成名が不明です。
echo.
:End
endlocal
pause
exit

実行してみた結果

ちゃんとIF文で分岐した命令の通り、変数に格納されたIPアドレスが表示できました。

Windows 10 の場合

Windows10でバッチファイルを実行した結果

Windows 7 の場合

Windows7でバッチファイルを実行した結果

IPCONFIGコマンドを使った参考ページ

以下のページではIPCONFIGコマンドで取得したIPアドレスを変数に入れる方法を掲載しています。

前へ

IPCONFIGで取得したIPアドレスを変数に入れて判別するバッチファイルを作る方法