请求协助编写仅在172.16.10.0子网内执行的脚本
我来给你两个实用的Windows脚本方案,都能精准完成你要的需求——只在172.16.10.0/24子网内执行指定的路由删除命令:
批处理脚本方案
这个脚本会先抓取本地工作站的IP地址,检查是否属于目标子网,符合条件就自动执行路由删除操作:
@echo off setlocal enabledelayedexpansion :: 遍历所有本地IPv4地址,筛选目标子网 for /f "tokens=2 delims=:" %%a in ('ipconfig ^| findstr /i "ipv4 address"') do ( set "ip=%%a" set "ip=!ip: =!" :: 移除IP地址里的多余空格 :: 检查IP是否以172.16.10.开头(匹配172.16.10.0/24子网) echo !ip! | findstr /b "172.16.10." >nul if !errorlevel! equ 0 ( echo 检测到当前子网为172.16.10.0/24,执行路由删除命令... :: 执行路由删除,注意必须用管理员权限运行 route delete 192.168.1.0 mask 255.255.255.0 172.16.10.1 goto :end ) ) echo 当前不在172.16.10.0/24子网内,无需执行操作。 :end endlocal pause
关键细节提醒:
- 脚本需要以管理员身份运行,否则修改路由表会提示权限不足
- 找到匹配子网后会立即执行命令并退出循环,避免重复操作
PowerShell脚本方案
PowerShell的网络命令更灵活,能更精准地过滤有效IP地址:
# 定义目标子网 $targetSubnet = "172.16.10.0/24" # 获取本地有效IPv4地址(过滤掉临时/自动配置的APIPA地址) $localIPs = Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.PrefixOrigin -in "Dhcp", "Manual" } foreach ($ip in $localIPs) { if ($ip.IPAddress -like "172.16.10.*") { Write-Host "检测到当前子网为$targetSubnet,执行路由删除命令..." # 执行路由删除命令 route delete 192.168.1.0 mask 255.255.255.0 172.16.10.1 exit } } Write-Host "当前不在$targetSubnet子网内,无需执行操作。"
关键细节提醒:
- 右键PowerShell选择「以管理员身份运行」才能正常执行路由修改
- 如果有多网卡,可在
Get-NetIPAddress后添加-InterfaceAlias "你的网卡名称"来指定特定网卡检测
额外建议
如果需要脚本开机自动执行,推荐用Windows任务计划(比直接放启动文件夹更灵活):
- 创建新任务,设置触发条件为「登录时」
- 操作选择「启动程序」,指向你的脚本文件
- 在「常规」标签勾选「使用最高权限运行」
内容的提问来源于stack exchange,提问作者user9527129
相关产品推荐
相关产品推荐

