IPv4アドレスを変数に取り込むバッチです。
こんなニーズあるんか?シリーズです。
ipconfigの出力からIPアドレスを変数に取り込みます。
これを作っていて気が付いたのですが、自宅からVPN接続していると、IPv4アドレスが2つありました。
いくつまで対応すればよいかわからないので、今回は、いくつでも取得できるようにしています。
IPv4を変数に取り込むバッチは、以下の通りです。
もちろん、IPv4の部分をIPv6などに変更すればv6も取得できます。
2023/06/30追記
@DamashiGami(コーポれーしょん 騙し髪)さんに、文字置き換えにワイルドカードが使える事を教えていただいたので、よりシンプルにしてみました。ありがとうございました。
(2023/7/12 我が家の2重ルータを回避し、無事IPv6でアクセスが出来るようになったのを記念して、IPv6の情報も簡単に表示できるようにしてみました。 get_ip 6または、v6で表示できます。)
@echo off
chcp 932 >nul
setlocal enabledelayedexpansion
set key_word=IPv4
if "%1"=="6" set key_word=IPv6
if "%1"=="v6" set key_word=IPv6
rem ipconfigコマンドから情報を取得する。
set count=0
for /f "usebackq delims=" %%a in (`ipconfig^|findstr /i "%key_word%"`) do (
set contents=%%a
set "contents=!contents:*: =!"
set /a count+=1
set contents[!count!]=!contents!
)
rem 情報を表示する。
for /l %%i in (1,1,%count%) do ( echo %key_word%[%%i]=!contents[%%i]!)
if "%SESSIONNAME%"=="" pause
endlocal
exit /b
上記の応用で、ipconfig /allから得られる様々な情報を変数に取り込むことができる拡張バージョンも作りました。こちらは、結果にスペースを含む場合があるので、若干変数加工も増えています。
全くニーズが無いバッチかもしれませんが、コマンドを差し替えたりすれば、更に様々な情報を入手できます。
実はこれを作っていて、前回アップした、不思議な文字置き換え関係のエラーに悩まされました。
皆さんのアドバイスで、()に関連する不思議なエラーを回避できたので、2023/7/12最終バージョンに更新します。
@echo off
setlocal enabledelayedexpansion
rem 欲しい情報が複数回出現する場合があるケースに対応(VPN接続時のIPアドレスなど)
rem PreferredをNOにすると、(優先)、英語モードの場合は、(Preferred)を削除する。
set Preferred=NO
rem パラメータでキーワードを指定することも可能にしておく。
rem 例えば、パラメータに 説明 や、物理アドレスなど、入手したい情報を入れる。(必要か?)
if "%1"=="" ( set key_word=IPv4) else (set key_word=%1)
set get_command=ipconfig /all
rem ipconfigコマンドから情報を取得する。
set count=0
for /f "usebackq delims=" %%a in (`%get_command%^|findstr /i "%key_word%"`) do (
rem パラメータで、説明を指定した場合など、スペースが含まれる事があるので、''で囲んでおく。
set contents='%%a'
call :trim
set /a count+=1
set contents[!count!]=!contents!
)
rem 情報を表示する。見つからなかった場合は、何も表示しない。
for /l %%i in (1,1,%count%) do ( echo %key_word%[%%i]=!contents[%%i]!)
if "%SESSIONNAME%"=="" pause
endlocal
exit /b
rem サブルーチン
:trim
set "contents=%contents:*: =%"
set contents=%contents:~-0,-1%
if "%Preferred%"=="NO" (
set "contents=!contents:(優先) =!"
set "contents=!contents:(Preferred) =!"
)
:end_trim
exit /b