1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

バッチでIPアドレスなど取得します。(複数対応)(こんなニーズあるんか?)

Last updated at Posted at 2023-06-28

IPv4アドレスを変数に取り込むバッチです。

こんなニーズあるんか?シリーズです。

ipconfigの出力からIPアドレスを変数に取り込みます。
これを作っていて気が付いたのですが、自宅からVPN接続していると、IPv4アドレスが2つありました。

いくつまで対応すればよいかわからないので、今回は、いくつでも取得できるようにしています。
IPv4を変数に取り込むバッチは、以下の通りです。
もちろん、IPv4の部分をIPv6などに変更すればv6も取得できます。

2023/06/30追記

@DamashiGami(コーポれーしょん 騙し髪)さんに、文字置き換えにワイルドカードが使える事を教えていただいたので、よりシンプルにしてみました。ありがとうございました。
(2023/7/12 我が家の2重ルータを回避し、無事IPv6でアクセスが出来るようになったのを記念して、IPv6の情報も簡単に表示できるようにしてみました。 get_ip 6または、v6で表示できます。)

get_ip.bat
@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最終バージョンに更新します。

get_info.bat
@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

1
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?