IPアドレスを接続名に依存せず変更するBatファイル

その他
スポンサーリンク

IPアドレスを変更するBatファイルが上手く動かない!!

ということで、今回はIPアドレスをBatファイルで変更する方法についていろいろ試行錯誤したので記事にしてみたいと思います。

やったことはよくある固定IPアドレスの変更なのですが、先人者様たちがブログ等に載せているやり方でBatファイルを作成し、全てのPCで利用しようとすると一部のPCでうまく動かないことがありました。
原因は、ネットワークカードの接続名がBatファイルの名称と異なっているからうまく処理できないというものでした。

図のように

ローカルエリア接続

本来新規でセットアップした際は、”ローカル エリア接続”という語尾に数字がついていないネットワークカードの接続名なのですがなぜか “5”という数字が出現!!

なんでかなぁといろいろ調べていると怪しいのが見つかりました。
私は新しいPCを準備する際に初期セットアップを簡略化するため、Acronisというソフトでマスターコピーデータを作成し展開しているのですが、新規PCにマスタデータを復元した際にネットワークカードの接続名がレジストリに残るのか、毎回数字がつくようになっておりました。

接続名が変わってもIPアドレスを変更するBatファイル

毎回Batファイルの接続名を変更しないといけないとなるとBatファイルの意味がないので、なんとか回避したいと思いいろいろ試行錯誤してみて下記のようなBatファイルを作成しました。同じ悩みを抱えている人がいれば、コピペして試してみてください。(解説は↓)

Batファイルの解説!!

ここからはBatファイルの解説を行いたいとおもいますので興味のない方はそっと閉じてください(笑)

まず、1行目から8行目までは簡単なので適当に書きます。。

  • 「@echo off」は処理内容を非表示に。
  • 「rem」から始まるものは処理に影響しないコメント。
  • set」で変数名を定義し、値を格納しています。ここのIPアドレスを自分の環境に合わせて変更してください。

で、ここから悩んだところなのですが
従来のやり方だと1行目から8行目の間にもう一つ変数を加え、ネットワーク接続名を「ローカル エリア接続」といった形で入れていたのですが、それだと上記の問題で動かないケースがあったので無理やり取得する方法にしました。

その方法が10行目からになるのですが
コマンドプロンプトで「ipconfig /all」と打ち込むと取得できる情報のうち、ネットワーク名の部分を抜き出しそれを変数にぶち込むという風にしました。

オレンジ色の部分です。

Ipconfig/all

  1. setlocal enabledelayedexpansion」で遅延環境変数を使用できるようにし
  2. ‘ipconfig /all ^| find “イーサネット アダプター”‘」でイーサネット アダプターという文字列が含まれる行を検索しています。
  3. この中で、ローカル エリア接続 5:という部分をまずは抜き出したいのでfor文を使用しています。ここまでで
    • %%A⇒イーサネット
    • %%B⇒アダプター
    • %%C⇒ローカル エリア接続 5:
  4. が格納されます。「“tokens=1,2,*”」としているのは、*にしないとスペースの部分で分断されてしまうからです。こうして取得できた%%Cの値を「Network_Name」に入れております。
  5. しかし、実際に使用したい文字列は「ローカル エリア接続 5:」でなく「ローカル エリア接続 5」で”:”は不要なため、「!Network_Name:~0,1!で取り除いた値をさらにLocal_Network」に格納しています。
  6. これで、Local_Network=ローカル エリア接続5になりましたので3行目~7行目の値を元に15行目~17行目を実行しています。

補足

今回Windows7の有線ネットワークで試しましたが、Windows10だと”ローカル エリア接続”の部分が”イーサネット”になるかと思うのですがそちらもBatファイルの内容を変えなくても問題なく動くと思います。
ちなみに管理者の権限がないアカウントで行うとそもそも動かないので、管理者権限のあるアカウントで動かすかRunasコマンドやVBスクリプトを作成し、Batファイルを呼び出すようにしてみてください。
PowerShellはよくわからないので、逆に詳しい人は教えてくれると嬉しいです(笑)

コメント

タイトルとURLをコピーしました