批处理文件 IF 条件

batch file IF condition

我正在尝试使用以下代码获取与 netsh 的当前活动连接(我不想使用 wmic)。

@echo off

FOR /F "tokens=3,*" %%A IN ('netsh interface show interface^|findstr /i "\<connected\>"') DO (

if %%B == .........
)

我只想考虑默认连接名称:

Wi-Fi、以太网、无线网络连接、本地区域连接并在此基础上做一些事情。

例如:如果 %%B = WiFi 或以太网或....(

::在这里做点什么 )

我只希望“某事”执行一次,因为这些连接中只有 1 个在任何给定时间处于活动状态。

我认为像这样的东西应该可以解决问题:

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

for /f "tokens=3,*" %%a in ('netsh interface show interface ^| findstr /i "\<connected\>"') do (
    set ifname=%%b
    if "!ifname:~0,8!"=="Ethernet" goto execute
    if "!ifname:~0,21!"=="Local Area Connection" goto execute
    if "!ifname:~0,5!"=="Wi-Fi" goto execute
    if "!ifname:~0,27!"=="Wireless Network Connection" goto execute
)
echo No connected interface found, exiting...
goto :EOF

:execute
echo Found connected interface (%ifname%), executing...
:: do whatever you need

基本上这个想法是寻找以这四个不同字符串开头的接口,然后跳转到执行您想要的任何内容的标签。

[如果我没有指出现在在 PowerShell 中完成这可能更好,那我就是失职了,但是……]

这是一个未经测试的示例,它应该只是告诉您与您唯一分配的 IP 地址关联的设备的接口名称。

@Echo Off
SetLocal EnableExtensions
For /F "Delims==" %%G In ('"(Set Interface) 2> NUL"') Do Set "%%G="
For /F Tokens^=4 %%G In ('%__APPDIR__%ROUTE.EXE -4 PRINT 0.0.0.0 ^
 ^| %__APPDIR__%findstr.exe /RC:"0.0.0.0 *0.0.0.0"') Do (Set "InterfaceIP=%%G"
    For /F Tokens^=5* %%H In ('%__APPDIR__%netsh.exe interface IP show route^
 ^|%__APPDIR__%find.exe "%%G"') Do Set "InterfaceName=%%I")
If Not Defined InterfaceIP GoTo :EOF
Set Interface & Pause

[编辑/]

这是我的评论中示例的一个略微修改版本,它使用 ping.exe 而不是 ROUTE.EXE 来返回用于确定接口名称的 IP 地址。

@Echo Off
SetLocal EnableExtensions
For /F "Delims==" %%G In ('"(Set Interface) 2> NUL"') Do Set "%%G="
For /F "Tokens=2 Delims=[]" %%G In ('^"%__APPDIR__%ping.exe "%COMPUTERNAME%" ^
 -n 1 -4 2^> NUL ^| %__APPDIR__%find.exe /I "%COMPUTERNAME%"^"') Do (
    Set "InterfaceIP=%%G" & For /F Tokens^=5* %%H In ('%__APPDIR__%netsh.exe ^
     interface IP show route ^| %__APPDIR__%find.exe "%%G"'
    ) Do Set "InterfaceName=%%I")
If Not Defined InterfaceIP GoTo :EOF
Set Interface & Pause

两个示例中的最后一行仅显示了两个变量,以便您可以看到它们。您显然会用其余代码替换它们。