複数のネットワークをバッチで簡単に切り替える(ipv4/ipv6兼用)


はじめての記事なので、書き方が変でも許してください。

今回はDNSを切り替える際にいちいちコントロールパネルまで行かずともデスクトップから一発で変えられる、そんなバッチファイルをつくっていこうと思います。

と言ってもすでにやってる方がいましたので、それをIPv6に対応させてパブリックDNSの切り替えを主として書き換えていこうと思います。

先人のコードと変わっているところは、各切り替え先のDNSアドレス、IPv6要素の追加、文字コードの変更などです。

ちなみに、IPアドレスは自動取得のみ。設定したい場合は該当する行のDHCPというところを適当なアドレスに書き換えます。
DNSサーバーアドレスは自動・Google・Cloudflareの3種類用意してあります。
IPアドレス/DNSサーバーはいくらでも追加できます。

とりあえず、コマンドプロンプトはShift-JISなのでUTF-8に切り替えてあげないと文字化けします。

chcp 65001

これで切り替えられます。

これを踏まえて、以下が実行ファイルです。

DNS.bat
@echo off
chcp 65001
echo 1"自動"
echo 2"Google Public DNS"
echo 3"Cloudflare"
echo.
choice /C:123 /M:"どのネットワークに接続しますか"
echo.

set NAME=イーサネット

if %ERRORLEVEL% equ 1 (
  netsh interface ipv4 set address "%NAME%" dhcp
  netsh interface ipv4 set dns "%NAME%" dhcp
  netsh interface ipv6 set dns "%NAME%" dhcp
  echo 自動設定に切り替えました!
) else if %ERRORLEVEL% equ 2 (
  netsh interface ipv4 set address "%NAME%" dhcp
  netsh interface ipv4 set dns "%NAME%" static 8.8.8.8 primary
  netsh interface ipv4 add dns "%NAME%" 8.8.4.4
  netsh interface ipv6 set dns "%NAME%" static 2001:4860:4860::8888 primary
  netsh interface ipv6 add dns "%NAME%" 2001:4860:4860::8844
  echo Google Public DNSに切り替えました!
) else if %ERRORLEVEL% equ 3 (
  netsh interface ipv4 set address "%NAME%" dhcp
  netsh interface ipv4 set dns "%NAME%" static 1.1.1.1 primary
  netsh interface ipv4 add dns "%NAME%" 1.0.0.1
  netsh interface ipv6 set dns "%NAME%" static 2606:4700:4700::1111 primary
  netsh interface ipv6 add dns "%NAME%" 2606:4700:4700::1001
  echo Cloudflareに切り替えました!
)

pause

このままでは、管理者権限が付与されていないので、
同じディレクトリにもう一つ起動用のバッチファイルをつくり、

DNS-Change.bat
powershell start-process DNS.bat -verb runas

としてあげます。
こちらを起動することで、管理者として起動をいちいち選ばなくてよくなります。

似たファイルが2つあってややこしいという方は、DNS.batの方のショートカットを作成して、そちらの起動権限を管理者にしてあげましょう。

ということで、以上DNSを切り替えるだけのバッチファイルでした!