WIndows下一键切换网卡IP脚本

文章目录

背景

在和PLC或者其他设备打交道时,往往会需要用网线与其连接起来进行通讯,同时他们很可能在不同的网段,因此一旦设备多了起来,我们网口就需要设置多个不同网段的静态IP。比如我这里,设置了三个不同网段的IP,目的是和不同的设备连接(不是同时连,是插哪个设备就用哪个设备)

但是同时,有时候我们又需要连接交换机/路由器上互联网,此时,我们常常需要将网卡的DHCP打开(自动获取IP地址)才能正常上网,而一旦勾选【自动获取IP地址】,我们之前设置的好几个ip就都被清除了。如下图所示:

假如每次我们在这两种工作场景切换都手动设置IP的话,估计会烦死。因此,我让AI写了个bat脚本,可以来回切换这两种模式。

脚本

将下面的脚本中的网卡名称【以太网_2】改成你的需要操作的网卡名称(我不太确定网卡名称中带空格行不行,不行的话,就把你的网卡名称修改成不带空格的),然后保存为一个xxx.bat文件,每次要切换模式时,就双击启动即可。

脚本中可以设置多个不同网段的IP(记得设置IP_COUNT),具体请看脚本中的注释

bash 复制代码
@echo off
chcp 65001 >nul
setlocal EnableDelayedExpansion

:: ============================================================
:: 配置区 - 根据实际情况修改
:: ============================================================

:: 网卡名称(在 ncpa.cpl 或 netsh interface show interface 中查看)
set "NIC=以太网_2"

:: 静态 IP 配置(可添加多个网段)
:: 格式:IP地址/子网掩码
:: 第一个为主 IP(会设置网关),其余为辅助 IP
set IP_COUNT=3
set "IP_1=192.168.0.100/255.255.255.0"
set "IP_2=192.168.1.100/255.255.255.0"
set "IP_3=192.168.3.100/255.255.255.0"

:: 默认网关(留空则不设置网关)
set "GATEWAY="

:: DNS(留空则不设置,可填如 8.8.8.8)
set "DNS="

:: ============================================================
:: 以下为脚本逻辑,一般无需修改
:: ============================================================

:: 检查管理员权限
net session >nul 2>&1
if %errorlevel% neq 0 (
    echo [错误] 请以管理员身份运行此脚本!
    echo 右键此文件 → 以管理员身份运行
    pause
    exit /b 1
)

:: 检测当前是否为 DHCP
netsh interface ip show config name="%NIC%" | findstr /i "DHCP" | findstr /i "是 Yes" >nul 2>&1
if %errorlevel% equ 0 (
    echo 当前模式:DHCP
    echo 正在切换到静态 IP ...
    echo.
    call :SET_STATIC
) else (
    echo 当前模式:静态 IP
    echo 正在切换到 DHCP ...
    echo.
    call :SET_DHCP
)

echo.
echo ============================================================
echo 当前网卡配置:
netsh interface ip show config name="%NIC%"
echo ============================================================
pause
exit /b 0

:: ============================================================
:SET_STATIC
:: ============================================================

:: 解析并设置第一个 IP(主地址)
for /f "tokens=1,2 delims=/" %%a in ("!IP_1!") do (
    set "FIRST_IP=%%a"
    set "FIRST_MASK=%%b"
)

if defined GATEWAY (
    netsh interface ip set address name="%NIC%" static !FIRST_IP! !FIRST_MASK! !GATEWAY!
) else (
    netsh interface ip set address name="%NIC%" static !FIRST_IP! !FIRST_MASK!
)

if %errorlevel% equ 0 (
    echo [√] 主 IP 已设置:!FIRST_IP!/!FIRST_MASK!
) else (
    echo [×] 主 IP 设置失败!
    goto :eof
)

:: 添加剩余辅助 IP
set /a idx=2
:LOOP_ADD_IP
if !idx! gtr %IP_COUNT% goto :DONE_STATIC

set "CURRENT=!IP_%idx%!"
for /f "tokens=1,2 delims=/" %%a in ("!CURRENT!") do (
    netsh interface ip add address name="%NIC%" %%a %%b
    if !errorlevel! equ 0 (
        echo [√] 辅助 IP 已添加:%%a/%%b
    ) else (
        echo [×] 辅助 IP 添加失败:%%a/%%b
    )
)

set /a idx+=1
goto :LOOP_ADD_IP

:DONE_STATIC
:: 设置 DNS
if defined DNS (
    netsh interface ip set dns name="%NIC%" static !DNS!
    echo [√] DNS 已设置:!DNS!
)

echo.
echo [完成] 已切换到静态 IP 模式(共 %IP_COUNT% 个地址)
goto :eof

:: ============================================================
:SET_DHCP
:: ============================================================
netsh interface ip set address name="%NIC%" dhcp
netsh interface ip set dns name="%NIC%" dhcp

echo [完成] 已切换到 DHCP 模式
goto :eof
相关推荐
汤愈韬43 分钟前
NAT Server 与目的Nat
网络·网络协议·网络安全·security
7ACE2 小时前
Wireshark TS | TLP 超时时间
网络·网络协议·tcp/ip·wireshark·tcpdump
Curtain_Gin4 小时前
windows nvim lazy
windows
生而为虫6 小时前
Claude Code 最新版安装教程(Windows/Mac/Linux 全平台) 面向普通用户的 Claude Code 安装与模型接入指南
linux·windows·macos
DevilSeagull6 小时前
Windows 批处理 (Batch) 编程: 从入门到入土. (一) 基础概念与环境配置
开发语言·windows·后端·batch·语言
CyL_Cly7 小时前
Parsec(parsec安卓/windows/macos下载)
windows
凯瑟琳.奥古斯特8 小时前
NAT原理及作用详解
网络·网络协议
2601_958320578 小时前
【小白零基础上手 】钉钉内部机器人接入 OpenClaw 完整流程讲解(含安装包)
人工智能·windows·机器人·钉钉·open claw·open claw安装
love530love8 小时前
f2 项目(多平台的作品下载与接口数据处理)源码部署记录
人工智能·windows·f2
生而为虫9 小时前
在VScode中使用Claude Code agent并配置模型(仅mac电脑实际操作,windows电脑未实际操作如有问题可留言)
windows·vscode·macos