5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バッチファイルでローカルIPアドレスを変数に格納

Last updated at Posted at 2021-04-25

Y子です。
今回は、ローカルIPアドレスを変数に格納してみます。
グローバルIPアドレスを変数に格納する のは以前やりましたが、ローカルIPアドレスの方が文字列加工が難しく、今回初めてやってみました。

概要・用途

自分のローカルIPアドレスを取得して、変数に格納します。
ログを取得したり、なんらかの自動化処理の中で、使うことを想定します。
確認環境:Windows 10 Home (Bld. 19042.928)

コード

(1) FIND関数の準備

まず、ExcelのFIND関数に相当する「指定の文字が何文字目か調べる処理」を使いたいので、これを独立したバッチファイルにしておき、戻り値を利用できるようにします。
エラー処理は、機会があれば検討してみたいですが、今回は真面目に考えていません。

FIND関数を考えたとき から出力が少し変わっただけですが、コードを載せておきます。
(行数多くて恥ずかしいんですよね。もうちょっとコンパクトにできたらいいんですが)

find_like_excel.bat
@echo off
rem 検索文字列, 対象, [開始位置=1]
set find_text=%~1
set within_text=%~2
set start_num=%~3

rem 位置カウンタ初期化
set charpos=0
rem 文字位置カウント(サブルーチン実行)
call :find_like_excel "%find_text%" "%within_text%" "%start_num%"

rem 結果出力
echo %charpos%
exit /b

rem ====サブルーチン====
rem 文字位置をカウントする
:find_like_excel
  setlocal

  rem 引数がない場合は終了する
  if "%~2"=="" (echo 引数がありません & pause & exit /b)

  rem 検索文字列, 対象, [開始位置=1]
  set find_text=%~1
  set within_text=%~2
  set start_num=%~3

  rem 開始位置の指定がない場合はデフォルト「1」
  if "%start_num%"=="" (set start_num=1)
  rem バッチファイルのデフォルトは「0」なので合わせる
  set /a start_num-=1

  rem 開始位置の調整
  call set within_text=%%within_text:~%start_num%%%

  rem 文字位置カウントのループ開始
  :label_find
  rem 位置カウンタ加算
  set /a charpos+=1

  rem 文字列がなくなったら終了
  if "%within_text%"=="" (
    set charpos=0
    goto :label_end
  )

  set length=0
  set str_tmp=%find_text%

  rem strlenループ開始
  :label_strlen
  rem 長さ加算
  set /a length+=1
  rem 1文字減らす
  set str_tmp=%str_tmp:~1%
  rem 文字列がなくなったら終了
  if not "%str_tmp%"=="" (goto :label_strlen)
  rem strlenループ終了

  rem 文字列が一致すれば終了
  call set str_tmp=%%within_text:~0,%length%%%
  if "%str_tmp%"=="%find_text%" (goto :label_end)

  rem 文字列がまだあれば、1文字減らしてループ
  set within_text=%within_text:~1%
  goto :label_find
  rem 文字位置カウントのループ終了

  :label_end
  endlocal && set charpos=%charpos%
exit /b

(2) ipconfigコマンドの結果を加工

Windowsでネットワーク情報を知るといえば、ipconfigコマンドです。
これに「IPアドレスだけを出力」のようなオプションがあればいいのですが、見当たらないので、力技で実現します。

get_localip.bat
@echo off

rem ipconfigの結果から「IPv4」の行を抽出
rem (IPv4 アドレス . . . . . . . . . . . .: 192.168.x.x)
for /f "usebackq delims=" %%a in (`ipconfig^|findstr "IPv4"`) do set ipaddr=%%a

rem スペースは邪魔になるので削除
rem (IPv4アドレス............:192.168.x.x)
set ipaddr=%ipaddr: =%

rem ":"の位置を取得
for /f "usebackq" %%a in (`call find_like_excel.bat ":" %ipaddr%`) do set pos=%%a

rem ":"までを削除
call set ipaddr=%%ipaddr:~%pos%%%

echo %ipaddr%
実行結果
> get_localip.bat
192.168.x.x

おわりに

グローバルIPアドレスも取れたんだからローカルIPアドレスもね、という感じで作ってみました。
何に使えるかは正直わかりません。笑
役に立った方は用途を教えてくださると嬉しいです。

では!

5
3
1

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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?