バッチでIPとプロキシの設定を切り替える

業務上、まったく関連のない複数のLANに対して、ノートパソコンを持って
行ったり来たりする中で、毎回手動で切り替えるのが面倒に感じたのでバッチを作成した。

Windows7 Pro で動作確認した。

@echo off
:: @ネットワーク切り替えバッチ@
:: 便宜上、IPアドレスやラベル名は編集してあります
:: このバッチで発生するいかなる問題に対して、私は責任を持ちません。
:: コピペは自己責任でお願いします。

set /P INPUT="接続先の番号を選択してください。NET_A:1 NET_B:2 NET_C:3"
if "%INPUPT%"=="1" goto NET_A
if "%INPUPT%"=="2" goto NET_B
if "%INPUPT%"=="3" goto NET_C
if "%INPUPT%"="" goto ERR_EMP
goto ERR_SOTEGAI

:: 固定IP、固定DNS、プロキシを変更
:NET_A
netsh interface ip set address "ローカル エリア接続" static 192.168.A.A 255.255.255.0 192.168.B.B
netsh interface ip set dns "ローカル エリア接続" static 192.168.C.C primary
netsh interface ip set dns "ローカル エリア接続" static 192.168.D.D

reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d 192.168.E.E:12000 /f
goto END

:: IPとDNSはDHCP、プロキシを変更、イントラはプロキシを介さないようにする
:NET_B
netsh interface ip set address "ローカル エリア接続" dhcp
netsh interface ip set dns "ローカル エリア接続" dhcp
netsh interface ip set dns "ローカル エリア接続" dhcp

reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d 192.168.a.a:8000 /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /t REG_SZ /d "192.*;<local>" /f
goto END


:: IPとDNSはDHCP、プロキシを変更、特定のホストはプロキシを介さないようにする
:NET_C
netsh interface ip set address "ローカル エリア接続" dhcp
netsh interface ip set dns "ローカル エリア接続" dhcp
netsh interface ip set dns "ローカル エリア接続" dhcp

reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d proxy.xxx.xxx.co.jp:9010 /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /t REG_SZ /d "*.XXX.co.jp;*.YYY.com;172.*;<local>" /f
goto END


:ERR_EMP
echo "入力番号がありません。番号を指定してください。処理を中断します。"
goto END

:ERR_SOTEGAI
echo "入力番号が想定外な値です。メニューに記載の番号を入力してください。処理を中断します。"
goto END

:END
echo "切り替え処理が終了しました。"

pause

ネットワークの切り替えで、肝となるのは以下の2点。

  1. PCのIPアドレスDNSの変更は、netsh interface ip コマンドで変更する。
  2. プロキシ関連は、レジストリを編集する。
  • netshコマンドを入力する際にネットワーク名*1がわからない場合は、ipconfigコマンドで、有効になっているアダプタを指定する。

例えば有線LANの場合は、”イーサネットアダプタ”の隣に出ている名称を入れればよい。

  • regコマンドは、ヘルプを見る限り、新規に追加するか、上書きしかないのと、プロキシを介さない設定については、ダブルクォートで囲まないとコマンドがエラーになる点が注意。
  • レジストリに渡す値がわからない時は、regeditでレジストリ値や型が参照できる。

また、見ての通り、性善説で書いているので、同じ条件を立て続けに実行すると、netshコマンドは既に設定済みと出力されて、エラーメッセージが出力される。
レジストリは毎回上書きなので、「コマンドは正常に終了しました」と出るが、、このあたりは、マイツール的な位置づけなので、追々対応することにしよう*2

*1:サンプルでいう”ローカルエリア接続”の部分

*2:LANの抜き差しのタイミングでは、ネットワークに接続できるが、タスクトレイの警告ダイアログが付きっぱなしになる事象もある。