在我的系统中,我有两个网络适配器,一个用于互联网,另一个用于本地网络。
当我需要使用互联网时,我会禁用本地网络适配器并启用互联网适配器,反之亦然。这是一个烦人的过程,从本地切换到互联网大约需要一分钟。
因此,我不会禁用互联网适配器,而是永久启用它,每当我需要本地时,我都会启用本地,这样它就会包装互联网并启用本地。每当我需要互联网时,我只需禁用本地,互联网(始终处于启用状态)就会尽快生效。
我已经编写了一个批处理脚本来执行此操作:(如果本地适配器(名为Unternet
)被禁用,它将打开它,反之亦然)
@echo off
Set "_localState="
Set _localState=YES
netsh interface show interface "Unternet" | find "Administrative state" | find "Enabled">nul || Set _localState=NO
if %_localState%==NO (
netsh interface set interface "Unternet" enable
) ELSE (
netsh interface set interface "Unternet" disable
)
它在我的系统上运行良好,但当我在另一个系统上尝试时,它却不行。问题出在哪里?我如何才能如此快速地通过互联网网络打开/关闭本地网络?
答案1
要给出确切原因的答案,问题中给出的信息是不够的。但这里有一些可能引发你的问题的主要诱因。
一些可能出现的问题
特权
要执行类似的更改,netsh interface SET ...
您必须以管理权限执行该命令。
最好创建shortcut.lnk
批处理并配置快捷方式以cmd.exe
使用管理权限执行。
接口名称(第 4 行)
考虑到(在另一个系统上)可能不存在名为“Unternet”的接口。要解决该问题,请在第 3 行和第 4 行之间插入此代码:
netsh interface show interface "Unternet">nul
if ERRORLEVEL 1 (
echo "ERR: Problem with interface Unternet."
) else ( ...
您对字符串的检查Administrative state
取决于Enabled
系统的语言设置。例如,这是德语系统的输出:
netsh interface show interface "Unternet"
Unternet
Typ: Dediziert
Verwaltungsstatus: Aktiviert
Verbindungsstatus: Verbunden
=> 如果系统语言_localState=NO
不同总是所造成的状态。
为了独立于语言设置进行测试,ERRORLEVEL
将会很有帮助。但netsh
在这种情况下不会有帮助,因为它的错误级别仅表明netsh
执行成功。
我建议使用ipconfig.exe
:
通过第 4 行上方插入的检查,我们在第 4 行知道存在设备“Unternet”(与其状态无关)。
通过设备检查设备ipconfig
只会在活动时显示(与netsh
的输出相反)。
因此,当按设备名称进行过滤时,我们可以在 ERRORLEVEL 中看到find
设备是 ENABLED 还是 DISABLED:
ipconfig /allcompartments | find /I "Unternet">nul
if ERRORLEVEL 1 ( ...
请注意,检查if ERRORLEVEL 1 ...
结果为 TRUE所有值都等于或大于 1。
解决方案
最终的脚本(稍微优化)可能是这样的:(
以管理员权限启动)
@echo off
:: Configure the net device name of the local LAN:
set localNetDev=Unternet
:: Check the existence of the net device:
netsh interface show interface "%localNetDev%">nul
if ERRORLEVEL 1 (
echo "ERR: Problem with interface '%localNetDev%'."
) else (
ipconfig /allcompartments | find /I "%localNetDev%">nul
if ERRORLEVEL 1 (
:: %localNetDev% is DISABLED – Switch it on:
netsh interface set interface "%localNetDev%" enable
) else (
:: %localNetDev% is ENABLED – Switch it OFF:
netsh interface set interface "%localNetDev%" disable
)
)
:: View result:
echo New state:
netsh interface show interface "%localNetDev%"
答案2
问题出在网络适配器的优先级上。我将本地适配器的优先级设置为高于互联网适配器的优先级,现在一切正常。
以下是更多信息: https://www.windowscentral.com/how-change-priority-order-network-adapters-windows-10