批处理文件 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
两个示例中的最后一行仅显示了两个变量,以便您可以看到它们。您显然会用其余代码替换它们。
我正在尝试使用以下代码获取与 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
两个示例中的最后一行仅显示了两个变量,以便您可以看到它们。您显然会用其余代码替换它们。