Y子です。
今回は、ローカルIPアドレスを変数に格納してみます。
グローバルIPアドレスを変数に格納する のは以前やりましたが、ローカルIPアドレスの方が文字列加工が難しく、今回初めてやってみました。
概要・用途
自分のローカルIPアドレスを取得して、変数に格納します。
ログを取得したり、なんらかの自動化処理の中で、使うことを想定します。
【確認環境:Windows 10 Home (Bld. 19042.928)】
コード
(1) FIND関数の準備
まず、ExcelのFIND
関数に相当する「指定の文字が何文字目か調べる処理」を使いたいので、これを独立したバッチファイルにしておき、戻り値を利用できるようにします。
エラー処理は、機会があれば検討してみたいですが、今回は真面目に考えていません。
FIND関数を考えたとき から出力が少し変わっただけですが、コードを載せておきます。
(行数多くて恥ずかしいんですよね。もうちょっとコンパクトにできたらいいんですが)
@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アドレスだけを出力」のようなオプションがあればいいのですが、見当たらないので、力技で実現します。
@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アドレスもね、という感じで作ってみました。
何に使えるかは正直わかりません。笑
役に立った方は用途を教えてくださると嬉しいです。
では!