Windows 用于启用/禁用网络适配器的批处理文件

Windows 用于启用/禁用网络适配器的批处理文件,windows,batch-file,cmd,Windows,Batch File,Cmd,我有一个脚本,它在工作中非常有用,可以用来更改我们的LAN适配器Static/DHCP,它工作得很好。但是,在网络上使用命令时,我们确实需要偶尔禁用网络适配器(在不同网络上发生冲突的情况下)。 这是我为enable/disable命令准备的代码 :2 @echo off netsh wlan show networks | FIND "Wireless network connection" /I /C >NUL 2>NUL IF %errorlevel% equ 1 (netsh

我有一个脚本,它在工作中非常有用,可以用来更改我们的LAN适配器Static/DHCP,它工作得很好。但是,在网络上使用命令时,我们确实需要偶尔禁用网络适配器(在不同网络上发生冲突的情况下)。 这是我为enable/disable命令准备的代码

:2
@echo off
netsh wlan show networks | FIND "Wireless network connection" /I /C >NUL 2>NUL
IF %errorlevel% equ 1 (netsh interface set interface "Wireless network connection" DISABLED)
IF %errorlevel% equ 0 (netsh interface set interface "Wireless network connection" ENABLED)
exit /b
当我单独运行netsh命令时,它确实正确执行,这意味着我的if语句有问题

启用网络适配器时:

netsh wlan show networks | FIND "Wireless network connection" /I /C
1
禁用网络适配器时:

netsh wlan show networks | FIND "Wireless network connection" /I /C
0
运行整个代码时,每个run-through(无论无线网络适配器的状态如何,都返回1)。 有什么建议吗

echo Errorlevel was %errorlevel%
IF %errorlevel% equ 1 (
 echo was enabled
 netsh interface set interface "Wireless network connection" DISABLED
) else (
 echo was disabled
 IF %errorlevel% equ 0 (
   netsh interface set interface "Wireless network connection" ENABLED
 )
)

正如您目前使用的,如果第一个
netsh
的结果生效,第二个
errorlevel
将解释第一个
netsh
的结果。

不要混淆命令输出和
%errorlevel%

C:> echo yes|find "yes" /c
1

C:> echo %errorlevel%
0

C:> echo yes|find "no" /c
0

C:> echo %errorlevel%
1

当最后一个命令(
find
)失败时,设置了
%errorlevel%
,而
find/c
返回查找结果的计数。无发现意味着
find/c
返回
0
%errorlevel%
为1。

可能会中断
“stdout”未被识别…
?对代码进行不同测试后留下的Ah。删去。代码会有任何其他问题吗?在执行另一个命令之前,请尝试将变量设置为等于
%errorlevel%
,并在
if
中对其进行测试。我想这不是if的一部分,也不是基于
的条件:2
在开始时将变量设置为等于%errorlevel%似乎没有任何问题效果。我假设我是要更改if以检查变量,而不是*errorlevel%添加了您的更改,但似乎仍然没有任何明显的更改。也许yu可以揭示您观察到的您没有预料到的效果。通过更改适配器设置,我希望无线网络适配器在以前启用时被禁用,反之亦然。因为我们不能太容易地回头看,也许您可以在适配器启用后再禁用的情况下发布初始
netsh
的响应?在输出中编辑谢谢Stephan澄清了我明显的误解!!