コマンドプロンプト

今回は、ネットワーク用アドレスの抽出・設定をするバッチを作成したので、ご紹介します。

ネットワーク用アドレスの抽出・設定とは?

「ネットワーク」 ‐「 プロパティ」 ‐ 「アダプターの設定の変更」 ‐ 「ワイヤレス ネットワーク接続」 ‐ 「プロパティ」 ‐ 「インターネットプロトコルバージョン4(TCP/IPv4)」より、以下画面を表示できますが、今回対象になるネットワーク用アドレスは、赤枠部分になります。

ネットワーク用アドレス

今回はこのネットワーク用アドレス

  • IPアドレス
  • サブネットマスク
  • デフォルトゲートウェイ
  • 優先 DNSサーバ
  • 代替 DNSサーバ

の抽出・設定をします。

今回ご紹介するBATで、

  • DHCPへの変更
  • 指定のネットワーク用アドレスへの変更
  • 設定済みのネットワーク用アドレスを抽出

が可能です。

使用者としては、ネットワーク用アドレスを一時的に変更する機会が多い方を想定しています。
例)普段は社内ネットワークとインターネットを分離しているけれど、ライセンス認証等の際にDHCPに設定変更が必要な場合。

他にも、設定ファイルを変えるだけで簡単にIPを変えれるので、パソコンセットアップやネットワーク用アドレス消失等のトラブル対応時の一助になるかもしれません。

それではバッチの内容をそれぞれご紹介します。
基本的に全てコピペで使用可能ですので、良かったら試しに動かしてみてください。

接続方法設定ファイルの設定

事前準備として、以下ファイルを設定ください。
このファイルはすべての処理で使用します。

CONNECTION_METHOD="ワイヤレス ネットワーク接続"

“ワイヤレス ネットワーク接続”箇所については、以下のネットワーク接続画面を参照いただき、抽出・設定したいネットワーク接続方法の名称を入力してください。
例)抽出・設定したいネットワーク接続方法がローカルエリア接続であれば、”ローカル エリア接続”等に書き換え

ネットワーク接続方法

ネットワーク用アドレスをDHCPに設定

以下のバッチでDHCP(IPアドレス・DNSサーバのアドレスを自動的に取得)に設定します。

@ECHO OFF
CD /D %~DP0\..\設定ファイル\

@REM ******************************************************************************
@REM * 接続方法設定ファイルを読み込み
@REM ******************************************************************************
FOR /F "DELIMS== TOKENS=1,2" %%A IN (CONNECTION.INI) DO (
  SET %%A=%%B
)

@REM ******************************************************************************
@REM * IPアドレス・DNSサーバのアドレスを自動的に取得する
@REM ******************************************************************************
NETSH INTERFACE IPV4 SET ADDRESS NAME=%CONNECTION_METHOD% SOURCE=DHCP
NETSH INTERFACE IPV4 SET     DNS NAME=%CONNECTION_METHOD% SOURCE=DHCP

処理結果です。
2か所が自動的に取得する(DHCP)となっています。

DHCP

ネットワーク用アドレスを任意の値に設定

事前準備として、「NETWORKADDRESS.INI」に、それぞれ設定したいネットワーク用アドレスを入力します。

IP_IP=123.45.6.1
IP_MASK=255.255.255.0
IP_GATEWAY=123.45.6.2
DNS_MAIN=123.45.6.3
DNS_SUB=123.45.6.4

「NETWORKADDRESS.INI」を使用し、以下のバッチでネットワーク用アドレスを任意の値に設定します。

@ECHO OFF
CD /D %~DP0\..\設定ファイル\

@REM ******************************************************************************
@REM * 接続方法設定ファイル、IPアドレス・DNSサーバのアドレス設定ファイルを読み込み
@REM ******************************************************************************
FOR /F "DELIMS== TOKENS=1,2" %%A IN (CONNECTION.INI,NETWORKADDRESS.INI) DO (
SET %%A=%%B
)

@REM ******************************************************************************
@REM * IPアドレス変更
@REM ******************************************************************************
NETSH INTERFACE IPV4 SET ADDRESS NAME=%CONNECTION_METHOD% SOURCE=STATIC ADDRESS=%IP_IP% MASK=%IP_MASK% GATEWAY=%IP_GATEWAY%

@REM ******************************************************************************
@REM * 優先DNSサーバ変更
@REM ******************************************************************************
NETSH INTERFACE IPV4 SET DNS NAME=%CONNECTION_METHOD% SOURCE=STATIC ADDRESS=%DNS_MAIN% REGISTER=PRIMARY VALIDATE=NO

@REM ******************************************************************************
@REM * 代替DNSサーバ変更
@REM ******************************************************************************
NETSH INTERFACE IPV4 ADD DNS NAME=%CONNECTION_METHOD% ADDRESS=%DNS_SUB% INDEX=2 VALIDATE=NO

処理結果です。
「NETWORKADDRESS.INI」と同様のネットワーク用アドレスが設定されます。

ネットワーク用アドレス設定済

ネットワーク用アドレスを抽出

以下の画面はネットワーク用アドレスが設定されている状態です。

ネットワーク用アドレス

バッチで設定されているネットワーク用アドレスを抽出します。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

CD /D %~DP0\..\設定ファイル\

@ECHO ******************************************************************************
@ECHO * 【警告】
@ECHO *  ネットワーク用アドレスを抽出し、「NETWORKADDRESS.INI」に書き込みます。
@ECHO *  問題なければ続行してください。
@ECHO ******************************************************************************
PAUSE

@REM ******************************************************************************
@REM * 接続方法設定ファイルを読み込み
@REM ******************************************************************************
FOR /F "DELIMS== TOKENS=1,2" %%A IN (CONNECTION.INI) DO (
  SET %%A=%%B
)

@REM ******************************************************************************
@REM * IPアドレスを設定ファイルに書き込み
@REM ******************************************************************************
SET TAGERT_ADDRESS="IP"
CALL :GET_ADDRESS ADDRESS
ECHO IP_IP=%ADDRESS_NUMBER%>NETWORKADDRESS.INI

@REM ******************************************************************************
@REM * サブネットマスクのアドレスを設定ファイルに書き込み
@REM ******************************************************************************
SET TAGERT_ADDRESS="サブネット"
CALL :GET_ADDRESS ADDRESS

@REM 前処理でXXX.XXX.XXX.XXX/XXX(マスクXXX.XXX.XXX.XXX)の形で取得してしまうため、
@REM XXX.XXX.XXX.XXXの形に成型する
FOR /F "DELIMS=( TOKENS=2" %%A IN ("%ADDRESS_NUMBER%") DO (
  SET ADDRESS_NUMBER=%%A
  SET ADDRESS_NUMBER=!ADDRESS_NUMBER:~3,-1!
)
ECHO IP_MASK=%ADDRESS_NUMBER%>>NETWORKADDRESS.INI

@REM ******************************************************************************
@REM * デフォルトゲートウェイのアドレスを設定ファイルに書き込み
@REM ******************************************************************************
SET TAGERT_ADDRESS="デフォルト"
CALL :GET_ADDRESS ADDRESS
ECHO IP_GATEWAY=%ADDRESS_NUMBER%>>NETWORKADDRESS.INI

@REM ******************************************************************************
@REM * 優先DNSサーバのアドレスを設定ファイルに書き込み
@REM ******************************************************************************
SET TAGERT_ADDRESS="DNS"
CALL :GET_ADDRESS DNSSERVERS
ECHO DNS_MAIN=%ADDRESS_NUMBER%>>NETWORKADDRESS.INI

@REM ******************************************************************************
@REM * 代替DNSサーバのアドレスを設定ファイルに書き込み
@REM ******************************************************************************

@REM DNSサーバのアドレスの1行目が優先、2行目が代替となるため、
@REM 1行目の行番号を取得し、行番号から代替DNSサーバのアドレスを取得しにいく
FOR /F "DELIMS=: TOKENS=1" %%A IN ('NETSH INTERFACE IPV4 SHOW DNSSERVERS %CONNECTION_METHOD% ^| FINDSTR /N %TAGERT_ADDRESS%') DO (
  SET DNSMAINLINE=%%A
)

FOR /F "SKIP=%DNSMAINLINE%" %%A IN ('NETSH INTERFACE IPV4 SHOW DNSSERVERS %CONNECTION_METHOD%') DO (
  SET ADDRESS_NUMBER=%%A
  SET ADDRESS_NUMBER=!ADDRESS_NUMBER: =!
  GOTO BREAK
)
:BREAK
ECHO DNS_SUB=%ADDRESS_NUMBER%>>NETWORKADDRESS.INI

GOTO :END


:GET_ADDRESS
REM アドレス取得
FOR /F "DELIMS=: TOKENS=2" %%A IN ('NETSH INTERFACE IPV4 SHOW %1 %CONNECTION_METHOD% ^| FINDSTR %TAGERT_ADDRESS%') DO (
  SET ADDRESS_NUMBER=%%A
  SET ADDRESS_NUMBER=!ADDRESS_NUMBER: =!
)

GOTO :END

:END

処理結果です。
「NETWORKADDRESS.INI」にネットワーク用アドレスが抽出されます。

IP_IP=123.45.6.5
IP_MASK=255.255.0.0
IP_GATEWAY=123.45.6.6
DNS_MAIN=123.45.6.7
DNS_SUB=123.45.6.8

管理者権限でバッチを実行する

今回のバッチですが、実行にあたって管理者権限が必要な処理(ネットワーク情報更新)となります。

そこで、起動するバッチを右クリックし「管理者として実行」でもいいのですが、今回はショートカットをダブルクリックすするだけで強制的に管理者権限で実行する方法を紹介します。

1.ショートカットを作成

ショートカット作成

2.ショートカットのプロパティを開き、詳細設定をクリック

プロパティ

3.「管理者として実行」にチェックを入れる

管理者として実行

この作業で、バッチを管理者権限で実行することができます。

バッチのフォルダ構成

以下のフォルダ構成で実行できるようにパス等の設定をしています。

バッチのフォルダ構成
│  ネットワーク用アドレスをDHCPに設定.bat - ショートカット.lnk   ・・・実行バッチ(管理者権限で実行可能)
│  ネットワーク用アドレスを任意の値に設定.bat - ショートカット.lnk ・・・〃
│  ネットワーク用アドレスを抽出.bat - ショートカット.lnk・・・・・・・・・〃
│
├─バッチ
│      ネットワーク用アドレスをDHCPに設定.bat ・・・・・・・・・・・・・・本体
│      ネットワーク用アドレスを任意の値に設定.bat ・・・・・・・・・・・・〃
│      ネットワーク用アドレスを抽出.bat ・・・・・・・・・・・・・・・・・〃
│
└─設定ファイル
        CONNECTION.INI ・・・・・・・・・・・・・・・・・・・・・・・・・接続方法(ローカル エリア接続等を入力)
        NETWORKADDRESS.INI ・・・・・・・・・・・・・・・・・・・・・・・抽出バッチを使用する際はこのファイルに抽出される。
                                          設定バッチを使用する際はこのファイルにネットワーク用アドレスを入力する。

まとめ

今回は、ネットワーク用アドレスの抽出・設定をするバッチをご紹介しました。
いかがでしょうか。よろしければコピペして使ってみてください。

また、今回ご紹介したバッチのコードに、

  • バッチで設定ファイルを読み込み環境変数に挿入する方法
  • 指定の文字列が存在する行番号を取得する方法
  • 行番号から、指定の行だけを抽出する方法

などの要素もありますので、ご参考になれば幸いです。