コピペプログ

VBA、VBS、バッチファイルなどの備忘録と日記です。

【bat】自宅と会社のネットワーク設定を切り替える

端末を自宅と会社両方で使用する場合、ネットワーク設定の変更が面倒なのでバッチファイルでワンクリックで変更できるように作成しました。 プロキシ設定のアドレスやポートなどをお使いの環境に合わせて入力してください。 ちなみにすでに会社で使用できる環境に設定されていることが前提です。

①会社の設定がされている状態で設定をダンプ処理。 ②ネットワークの設定を自動取得に変更。 ③自宅から会社に戻すときにダンプした情報を元に復元

といった流れで処理します。

@echo off

:■実行権限と引数で分岐

:管理者特権で実行しないとエラーになる処理
openfiles > NUL 2>&1

:上記処理がエラー(ユーザー権限)であれば一般権限で実行する処理に移動
if NOT %ERRORLEVEL% EQU 0 goto promotion

:■管理者権限で実行する処理

:startmenu
set NUM=
set Rtry=

rem プロキシを設定
set PROXYIPaddr=(プロキシのアドレス)
set PORT=(プロキシのポート)
set IntraAddr=(例外にするアドレス)
set DNS1=(会社のDNS)
CLS
echo 現在設定
ipconfig
echo =============メニュー=============
echo [1] 自宅ネットワークへ切り替え
echo [2] 会社ネットワークへ切り替え
echo [3] 現在の設定を確認する。
echo [4] この処理を終了する
echo ==================================

set /p NUM="実行する処理が記載された番号を入力してください >"
if "%NUM%"=="1" goto PT
if "%NUM%"=="2" goto INT
if "%NUM%"=="3" goto inetcpl
if "%NUM%"=="4" goto endMsg
goto NoNumber

:PT rem------------------------------------------------------------------------------------------
rem もし「%COMPUTERNAME%.nsh」ファイルが既に存在している場合、削除しておく
if exist C:\Users\%username%\%COMPUTERNAME%.nsh del C:\Users\%username%\%COMPUTERNAME%.nsh

rem 切り替え前にネットの設定をダンプ処理
netsh -c "interface ip" dump > C:\Users\%username%\%COMPUTERNAME%.nsh

rem 以下の「for」ループ内で変数を変化させるための宣言
setlocal enabledelayedexpansion
 
set BEFORE_STRING=はい
set AFTER_STRING=yes

set INPUT_FILE=C:\Users\%username%\%COMPUTERNAME%.nsh
set OUTPUT_FILE=C:\Users\%username%\%COMPUTERNAME%.nsh

setlocal enabledelayedexpansion
for /f "delims=" %%a in (%INPUT_FILE%) do (
set line=%%a
echo !line:%BEFORE_STRING%=%AFTER_STRING%!>>%OUTPUT_FILE%
)

endlocal

rem プロキシOFF
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 0
netsh winhttp reset proxy

rem  自宅ネットワーク設定読み込み
netsh interface ip set address "イーサネット" dhcp
netsh interface ip set address "Wi-Fi" dhcp
netsh interface ip set dns "イーサネット" dhcp
netsh interface ip set dns "Wi-Fi" dhcp
echo 設定が完了しました。


goto end


:INT rem------------------------------------------------------------------------------------------
echo 会社ネットワーク設定読み込み
rem 
netsh -f C:\Users\%username%\%COMPUTERNAME%.nsh
netsh interface ip set dns "イーサネット" static %DNS1% primary
netsh interface ip set dns "Wi-Fi" static %DNS1% primary

rem プロキシON
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 1
netsh winhttp set proxy proxy-server ="%PROXYIPaddr%:%PORT%" %IntraAddr%" 
echo 設定が完了しました。

goto end

:inetcpl rem------------------------------------------------------------------------------------------
echo 現在の設定を表示します。
netsh interface ip show config
netsh winhttp show proxy

goto end

:NoNumber rem------------------------------------------------------------------------------------------
echo その番号はメニューにありません。
echo ...
pause
goto startmenu

:end rem------------------------------------------------------------------------------------------
rem もう一度処理をするかどうか確認し、処理しない場合終了します。
echo --------------------------------------------------------------
ipconfig 
echo 別のプロキシ関連処理を実行するには[Y]を
set /p Rtry="処理を終了するには[N]を入力しEnterキーを押下します。 >"
if /i %Rtry% == y (goto startmenu)
if /i %Rtry% == n (goto endMsg)
goto endMsg:promotion
echo ユーザー権限です。

:管理者権限で自分自身を実行(昇格処理)
powershell start-process %~fs0 -verb runas

:endMsg
goto endMsg
:endMsg
set NUM=
set Rtry=
set PROXYIPaddr=
set PORT=
set IntraAddr=
echo %0 の動作が完了しました。