バッチで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点。
- netshコマンドを入力する際にネットワーク名*1がわからない場合は、ipconfigコマンドで、有効になっているアダプタを指定する。
例えば有線LANの場合は、”イーサネットアダプタ”の隣に出ている名称を入れればよい。
- regコマンドは、ヘルプを見る限り、新規に追加するか、上書きしかないのと、プロキシを介さない設定については、ダブルクォートで囲まないとコマンドがエラーになる点が注意。
- レジストリに渡す値がわからない時は、regeditでレジストリ値や型が参照できる。
また、見ての通り、性善説で書いているので、同じ条件を立て続けに実行すると、netshコマンドは既に設定済みと出力されて、エラーメッセージが出力される。
レジストリは毎回上書きなので、「コマンドは正常に終了しました」と出るが、、このあたりは、マイツール的な位置づけなので、追々対応することにしよう*2