WindowsのIP設定をサッと切り替える

# 概要
WindowsPCのキッティング作業などに使用できる
イーサネット、Wi-FiのIP設定をサッと切り替えるバッチを紹介する。
ちょっとだけIPの設定をいじりたいときに便利。



# `pc_ipv4_set.bat`

``` bat:pc_ipv4_set.bat
@echo off
setlocal enabledelayedexpansion

::管理者権限で実行しなかった場合、自動昇格する
whoami /priv | find "SeDebugPrivilege" > nul
if %errorlevel% neq 0 (
    echo 管理者権限が無いため、管理者権限で実行します
    pause
    @powershell start-process "%~0" -verb runas
    exit

)

::設定対象の入力
set /p CONF="IP設定対象を入力して下さい(eth/wifi)："

if %CONF%==eth (
    set CONF=イーサネット

) else if %CONF%==wifi (
    set CONF=Wi-Fi

) else (
    echo ===== error:「eth」or「wifi」を入力してください =====
    pause
    exit

)

::読み込むIP情報ファイルの入力
set /p FILE="使用するIP情報ファイル名を入力して下さい。(.txt不要)："

set n=0
for /f %%s in (%~dp0.\address\%FILE%.txt) do (
    set ADDRESS[!n!]=%%s
    set /a n=n+1

)


::IPアドレスのセット
set IP=%ADDRESS[0]%
::ネットマスクのセット
set MASK=%ADDRESS[1]%
::ゲートウェイのセット
set GATE=%ADDRESS[2]%
::DNS(プライマリ)のセット
set DNS1=%ADDRESS[3]%


::IPv4設定
netsh interface ipv4 set address ^
name=%CONF% ^
source=static ^
address="%IP%" ^
mask="%MASK%" ^
gateway="%GATE%"
netsh interface ipv4 set dns ^
name=%CONF% ^
source=static ^
address="%DNS1%" ^
register=non ^
validate=no

::以下オプション「セカンダリDNS、メトリック」
@REM ::DNS(セカンダリ)のセット
@REM set DNS2=%ADDRESS[4]%

@REM netsh interface ipv4 add dns ^
@REM name=%CONF% ^
@REM address="%DNS2%" ^
@REM index=2 ^
@REM validate=no

@REM netsh interface ipv4 set interface ^
@REM  interface=%CONF% ^
@REM  metric="25"


::終了時出力
echo ===== 固定IP設定 終了 =====
netsh interface ip show config name=%CONF%
pause
```



# `pc_dhcp_set.bat`

``` bat:pc_dhcp_set.bat
@echo off

::管理者権限で実行しなかった場合、自動昇格する
whoami /priv | find "SeDebugPrivilege" > nul
if %errorlevel% neq 0 (
    echo 管理者権限が無いため、管理者権限で実行します
    pause
    @powershell start-process "%~0" -verb runas
    exit

)


::設定対象の入力
set /p CONF="設定対象を入力して下さい(eth/wifi)："

if %CONF%==eth (
    set CONF=イーサネット

) else if %CONF%==wifi (
    set CONF=Wi-Fi

) else (
    echo ===== error:「eth」or「wifi」を入力してください =====
    pause
    exit

)


::DHCP設定
netsh interface ipv4 set address name=%CONF% source=dhcp
netsh interface ipv4 set dnsservers name=%CONF% source=dhcp


::終了時出力
echo ===== DHCP設定 終了 =====
netsh interface ip show config name=%CONF%
pause
```



# 使い方

## 1. 以下のようなフォルダ構成にする

```
.
├── address
│   ├── hogehoge.txt
│   ┆
│   └── hugahuga.txt
├── pc_dhcp_set.bat
└── pc_ipv4_set.bat
```


## 2. `address` フォルダに設定したいIP情報ファイル名を作成する

``` txt:hogehoge.txt
172.31.141.150     <--IPアドレス
255.255.0.0     <--サブネットマスク
172.31.141.254     <--デフォルトゲートウェイ
172.31.141.254     <--優先DNSサーバー
(172.31.141.253)   <--代替DNSサーバー(あってもなくても良い)
```


## 3. `pc_ipv4_set.bat` を実行する
![windows_bat_ipv4_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645714/7e3060e1-ffa4-f3d8-7f47-9f41d8bb315d.png)

![windows_bat_ipv4_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645714/10f87e08-3bc2-aed6-8ce1-5cb6603b988d.png)

![windows_bat_ipv4_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645714/cb93bde5-b7fd-0ecc-e89c-06ee8ab3a399.png)

![windows_bat_ipv4_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645714/5c782e9d-4be5-a340-c2e1-8032471bbab9.png)

![windows_bat_ipv4_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645714/5495c7a3-384a-bf79-bc5f-f1d061784445.png)



## 4. `pc_dhcp_set.bat` を実行する

![windows_bat_ipv4_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645714/b205c6e2-0d58-9a2a-0ce0-c8af72566931.png)

![windows_bat_ipv4_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645714/3012bc1f-42a5-3bb3-1d46-01627e16a290.png)

![windows_bat_ipv4_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645714/f917f7ef-03ea-1c4f-306f-62a1c83cb5ad.png)

![windows_bat_ipv4_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645714/52e6ea57-cb0d-458f-de49-849fc1c49b48.png)



# 補足
- バッチはフォルダ構成さえ守れば、ほとんどのパス上において正常に動作する。
- `pc_ipv4_set.bat` の `::以下オプション「セカンダリDNS、メトリック」` 以下のコメントを  
  外して、代替DNSサーバーの設定やメトリックの設定も行うことができる。
- IP設定対象のNICを増やしたい場合は、「イーサネット、Wi-Fi」のような  
  NIC名のif分岐を作成すると増やすことが可能。



# 参考

https://correct-log.com/bat_auto_admin/

https://www.projectgroup.info/tips/Windows/cmd_0012.html