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

コマンドプロンプトでIPCONFIGを実行して表示されるIPアドレスの情報を変数に入れるバッチファイルのメモ。

ネットワークの系統別に命令を分けたい

ネットワークの系統別に別けて命令を実行するバッチファイルが必要になったのでチャレンジしてみました。

まずはIPCONFIGで表示される値を確認

コマンドプロンプトで ipconfig と打って Enter を押すと以下の結果が表示されます。IPCONFIGは現在使用中のIPアドレスを表示するコマンドですが、この11行目に表示されているIPアドレスを変数に入れ、IF文で命令を分岐させたいのです。画面は Windows 10 で実行したときの画面です。

バッチファイル

以下のソースで IPCONFIG で表示される「IPv4アドレス」の欄にある値を変数に入れて処理することができました。Windows 10では11行目で表示されましたが、Windows 7では行数が異なったので、OSや環境によって取得したい値の行が何行目にあるのか注意が必要です。

@echo off
for /f "tokens=1,2* usebackq delims=^:" %%i in (`ipconfig ^| findstr /n /r "." ^| findstr /r "^11:"`) 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.
pause
:Trim
set IP=%*

実行してみた結果

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

以下のような取得方法も

取得したいIPアドレスの値がどの行にあるかOSによって異なるので、タイトルを指定して取得したい場合は以下の書き方でも取得できます。

for /f "tokens=1,2* usebackq delims=^:" %%i in (`ipconfig ^| findstr /n /r "." ^| findstr /r "IPv4 アドレス"`) DO @set IP=%%k

ただし、有線LANや無線LANとか仮想LANとかネットワークアダプタが複数あるPCの場合、一番最後のNICのアドレスを取得してしまいます。最初のNICのアドレスを指定して取得できる方法があるとは思いますが、また別の機会にチャレンジしてみたいと思います。

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

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

前へ

コマンドプロンプトで取得した文字列や変数内の行末にある空白を削除する方法

次へ

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