合并批处理文件,以便双击执行一个操作,而下一次双击则撤消或执行下一个操作?

合并批处理文件,以便双击执行一个操作,而下一次双击则撤消或执行下一个操作?

所以我有两个单独的批处理文件。一个用于禁用 NIC,另一个用于启用 wifi 卡:

@netsh interface set interface name="Ethernet" admin=disabled
@netsh interface set interface name="Wi-Fi" admin=Enabled

另一个则执行相反的操作(启用 NIC 并禁用 wifi 卡):

@netsh interface set interface name="Wi-Fi" admin=disabled
@netsh interface set interface name="Ethernet" admin=Enabled

我如何将它们合并为一批,以便我可以双击以切换一种方式,再次双击以切换另一种方式?

答案1

在此处输入图片描述


我已经回答过类似的问题,通过寻找比我自己的答案“更好”的答案,我当时提供了赏金。

真正值得的是@UnhandledExcepSean answer,它归结为使用寄存器中的值,在您的情况下,读取和写入然后“感知”相关的开/关操作......

@echo off & setlocal

pushd %__AppDir__% && 2>nul =;(
    reg.exe query HKCU\Environment /d /e /f on|find.exe /i "Click" >nul && =;(
    netsh.exe interface set interface name="Ethernet" admin=Disabled
    netsh.exe interface set interface name="Wi-Fi" admin=Enabled 
    setx.exe Click off >nul & endlocal & goto :eof                  );= || =;( 
    netsh.exe interface set interface name="Ethernet" admin=Enabled
    netsh.exe interface set interface name="Wi-Fi" admin=Disabled 
    setx.exe Click on 1>nul & endlocal & goto :eof                  );= );=

  • 一种替代方案:
@echo off

setlocal & pushd %__AppDir__% && 2>nul =;(
    reg.exe query HKCU\Environment /d /e /f on|find.exe /i "Click" >nul && =;(
    set "_Eth=Disable" && set "_Wi-Fi=Enabled" && set "_click=off" ) || =;(
    set "_Eth=Enabled" && set "_Wi-Fi=Disable" && set "_click=on"  ) );=    

netsh.exe interface set interface name="Ethernet" admin=%_Eth%
netsh.exe interface set interface name="Wi-Fi" admin=%_Wi-Fi%
setx.exe Click %_Click% 1>nul & popd & endlocal & exit /b

答案2

如何将它们合并为一个批处理文件?

netsh interface show interface显示Admin StateEnabledDisabled为接口。

以下批处理文件解析上述命令的输出并切换两个连接的状态。

@echo off
setlocal enabledelayedexpansion
rem run netsh and get admin status and interface name
rem skip headers
for /f "tokens=1,4* skip=3" %%f in ('netsh interface show interface') do (
  set _admin=%%f
  set _interface=%%g %%h
  if "!_interface!" == "Wi-Fi" (
    if "!_admin!" == "Enabled" (
      netsh interface set interface name="!_interface!" admin=disabled
      ) else (
      netsh interface set interface name="!_interface!" admin=enabled
      )
    )
  if "!_interface!" == "Ethernet" (
    echo !_interface!
    if "!_admin!" == "Enabled" (
      netsh interface set interface name="!_interface!" admin=disabled
      ) else (
      netsh interface set interface name="!_interface!" admin=enabled
      )
    )
  )
endlocal

进一步阅读

相关内容