Windows 系统 IP 地址设置工具自动获取网络连接名称

roed2025-07-15  128

@echo off
title ROED专用IP设置工具-增强版
color 0A

:: IP地址设置工具 - 增强版
:: 功能:自动识别网络连接并交互式设置IP地址配置
:: 注意:需要管理员权限运行

:: 检查管理员权限
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo 错误:此脚本需要管理员权限才能运行。
    echo 请右键点击脚本,选择"以管理员身份运行"。
    pause
    exit /b 1
)

:: 创建临时文件存储网络连接列表
set "tempFile=%temp%\network_connections.tmp"
set "connectionCount=0"

:: 获取所有网络连接名称并存储到临时文件
netsh interface show interface | findstr /i "已连接 已启用" > "%tempFile%"

:: 检查是否找到可用的网络连接
findstr /m "." "%tempFile%" >nul
if %errorlevel% neq 0 (
    echo 错误:未找到可用的网络连接。
    pause
    exit /b 1
)

:: 显示网络连接选择菜单
:SELECT_CONNECTION
cls
echo ==================================================
echo           网络连接选择
echo ==================================================
echo.
echo  请选择要配置的网络连接:
echo.

:: 初始化计数器
set "count=0"

:: 读取临时文件并显示连接列表
for /f "tokens=3*" %%a in ('type "%tempFile%" ^| findstr /v /c:"状态"') do (
    set /a count+=1
    echo  !count!. %%a %%b
    set "connection[!count!]=%%a %%b"
)

:: 保存连接总数
set "connectionCount=%count%"

:: 检查是否有可用连接
if %connectionCount% equ 0 (
    echo 未找到可用的网络连接。
    pause
    exit /b 1
)

echo.
echo  0. 退出
echo.

choice /C 0123456789 /N /M "请选择网络连接 [0-%connectionCount%]: "

:: 处理用户选择
if errorlevel %connectionCount% goto SELECTED
if errorlevel 1 goto SELECTED
if errorlevel 0 goto EXIT

:SELECTED
set /a selection=%errorlevel%
if %selection% equ 0 goto EXIT

:: 获取用户选择的连接名称
for /f "tokens=%selection%" %%a in ('set connection[') do (
    for /f "tokens=2 delims==" %%b in ("%%a") do (
        set "ConnectionName=%%b"
    )
)

:: 验证选择的连接是否存在
netsh interface show interface | find "%ConnectionName%" >nul
if %errorlevel% neq 0 (
    echo 错误:所选网络连接无效。
    pause
    goto SELECT_CONNECTION
)

:MENU
cls
echo ==================================================
echo           IP地址设置工具 - 增强版
echo ==================================================
echo.
echo  当前网络连接: %ConnectionName%
echo.
echo  1. 设置静态IP地址
echo  2. 设置为自动获取IP地址
echo  3. 显示当前IP配置
echo  4. 刷新DNS缓存
echo  5. 返回网络连接选择
echo  6. 退出
echo.
echo ==================================================
echo.

choice /C 123456 /N /M "请选择操作 [1-6]: "

if errorlevel 6 goto EXIT
if errorlevel 5 goto SELECT_CONNECTION
if errorlevel 4 goto FLUSH_DNS
if errorlevel 3 goto SHOW_IP
if errorlevel 2 goto SET_DHCP
if errorlevel 1 goto SET_STATIC_IP

:SET_STATIC_IP
cls
echo ==================================================
echo               设置静态IP地址
echo ==================================================
echo.

:INPUT_IP
set /p ip="请输入IP地址 [例如: 192.168.1.100]: "
call :VALIDATE_IP %ip%
if %errorlevel% neq 0 (
    echo 错误:无效的IP地址格式,请重新输入。
    goto INPUT_IP
)

:INPUT_MASK
set /p mask="请输入子网掩码 [例如: 255.255.255.0]: "
call :VALIDATE_MASK %mask%
if %errorlevel% neq 0 (
    echo 错误:无效的子网掩码格式,请重新输入。
    goto INPUT_MASK
)

:INPUT_GATEWAY
set /p gateway="请输入默认网关 [例如: 192.168.1.1]: "
if not "%gateway%"=="" (
    call :VALIDATE_IP %gateway%
    if %errorlevel% neq 0 (
        echo 错误:无效的默认网关格式,请重新输入。
        goto INPUT_GATEWAY
    )
)

:INPUT_DNS1
set /p dns1="请输入首选DNS服务器 [例如: 8.8.8.8]: "
if not "%dns1%"=="" (
    call :VALIDATE_IP %dns1%
    if %errorlevel% neq 0 (
        echo 错误:无效的DNS服务器格式,请重新输入。
        goto INPUT_DNS1
    )
)

:INPUT_DNS2
set /p dns2="请输入备用DNS服务器 [例如: 8.8.4.4]: (留空则不设置) "
if not "%dns2%"=="" (
    call :VALIDATE_IP %dns2%
    if %errorlevel% neq 0 (
        echo 错误:无效的DNS服务器格式,请重新输入。
        goto INPUT_DNS2
    )
)

echo.
echo 确认设置:
echo.
echo   IP地址:       %ip%
echo   子网掩码:     %mask%
echo   默认网关:     %gateway%
echo   首选DNS:      %dns1%
echo   备用DNS:      %dns2%
echo.

choice /C YN /N /M "是否应用上述设置? [Y/N]: "
if errorlevel 2 goto MENU
if errorlevel 1 goto APPLY_STATIC

:APPLY_STATIC
echo.
echo 正在设置IP地址,请稍候...

:: 设置IP地址和子网掩码
netsh interface ip set address name="%ConnectionName%" static %ip% %mask% %gateway% 1

:: 设置DNS服务器
if not "%dns1%"=="" (
    netsh interface ip set dns name="%ConnectionName%" static %dns1% primary
) else (
    netsh interface ip set dns name="%ConnectionName%" dhcp
)

if not "%dns2%"=="" (
    netsh interface ip add dns name="%ConnectionName%" %dns2% index=2
)

echo.
echo IP地址设置完成!
echo.
pause
goto MENU

:SET_DHCP
cls
echo ==================================================
echo             设置为自动获取IP地址
echo ==================================================
echo.

choice /C YN /N /M "确定要将 %ConnectionName% 设置为自动获取IP地址吗? [Y/N]: "
if errorlevel 2 goto MENU
if errorlevel 1 goto APPLY_DHCP

:APPLY_DHCP
echo.
echo 正在设置为自动获取IP地址,请稍候...

:: 设置为自动获取IP地址
netsh interface ip set address name="%ConnectionName%" dhcp

:: 设置为自动获取DNS服务器
netsh interface ip set dns name="%ConnectionName%" dhcp

echo.
echo 已成功设置为自动获取IP地址!
echo.
pause
goto MENU

:SHOW_IP
cls
echo ==================================================
echo              当前IP配置信息
echo ==================================================
echo.

ipconfig /all | findstr /i /c:"%ConnectionName%" /c:"IPv4" /c:"子网掩码" /c:"默认网关" /c:"DNS服务器"

echo.
pause
goto MENU

:FLUSH_DNS
cls
echo ==================================================
echo                刷新DNS缓存
echo ==================================================
echo.

ipconfig /flushdns

echo.
echo DNS缓存已刷新!
echo.
pause
goto MENU

:EXIT
cls
echo ==================================================
echo                感谢使用IP设置工具
echo ==================================================
echo.
del /f /q "%tempFile%" 2>nul  // 删除临时文件
exit /b 0

:VALIDATE_IP
:: 验证IP地址格式
set "ip=%~1"
set "octets=0"
set "valid=1"

:: 检查是否有4个点分十进制部分
for /f "tokens=1-4 delims=." %%a in ("%ip%") do (
    set /a octets+=1
    set "octet=%%a"

    :: 检查每个部分是否为数字
    for /f "delims=0123456789" %%i in ("!octet!") do set "valid=0"

    :: 检查每个部分是否在0-255之间
    if !octet! LSS 0 set "valid=0"
    if !octet! GTR 255 set "valid=0"
)

:: 检查是否正好有4个部分
if %octets% neq 4 set "valid=0"

exit /b %valid%

:VALIDATE_MASK
:: 验证子网掩码格式
set "mask=%~1"
call :VALIDATE_IP %mask%
if errorlevel 1 exit /b 1

:: 检查是否为有效的子网掩码值
set "valid_masks=255.0.0.0 255.128.0.0 255.192.0.0 255.224.0.0 255.240.0.0 255.248.0.0 255.252.0.0 255.254.0.0 255.255.0.0 255.255.128.0 255.255.192.0 255.255.224.0 255.255.240.0 255.255.248.0 255.255.252.0 255.255.254.0 255.255.255.0 255.255.255.128 255.255.255.192 255.255.255.224 255.255.255.240 255.255.255.248 255.255.255.252"

for %%m in (%valid_masks%) do (
    if "%mask%"=="%%m" exit /b 0
)

exit /b 1

把上面代码复制下来,存储到记事本,保存为后缀名为.bat,编码选择“ANSI”,编码不选会乱码。

申明 1、网站名称:容易得 网址:WWW.ROED.CN
2、网站的内容来源于网络,如有侵权,请联系邮箱:185254287#qq.com 本站会在7个工作日内进行删除处理。
3、转载发布此文目的在于传递分享更多信息,仅代表原作者个人观点,并不代表本站赞同其观点和对其真实性负责。文章内容仅供参考,请读者自行甄别,以防风险。
4、禁止发布和链接任何有关政治、色情、宗教、迷信、低俗、变态、血腥、暴力以及危害国家安全,诋毁政府形象等违法言论和信息。
转载请注明原文地址:https://www.roed.cn/read-479160.html