Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 批处理文件条件_If Statement_Batch File_Netsh - Fatal编程技术网

If statement 批处理文件条件

If statement 批处理文件条件,if-statement,batch-file,netsh,If Statement,Batch File,Netsh,我正在尝试使用以下代码获取与netsh的当前活动连接(我不希望使用wmic) @echo off FOR /F "tokens=3,*" %%A IN ('netsh interface show interface^|findstr /i "\<connected\>"') DO ( if %%B == ......... ) @echo关闭 对于/F“tokens=3,*”%%A IN('netsh interface show in

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

@echo off

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

if %%B == .........
)
@echo关闭
对于/F“tokens=3,*”%%A IN('netsh interface show interface^| findstr/i“\”)DO(
如果%%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
@echo关闭
SETLOCAL ENABLEDELAYEDEXPANSION
对于/f“tokens=3,*”%%a in('netsh interface show interface^| findstr/i“\”)do(
设置ifname=%%b
如果“!ifname:~0,8!”==“以太网”转到执行
如果“!ifname:~0,21!”==“本地连接”转到执行
如果“!ifname:~0,5!”==“Wi-Fi”转到执行
如果“!ifname:~0,27!”==“无线网络连接”转到执行
)
echo未找到连接的接口,正在退出。。。
后藤:EOF
:执行
echo找到已连接的接口(%ifname%),正在执行。。。
你需要什么就做什么
基本上,这个想法是寻找以这四个不同字符串开头的接口,然后跳转到执行您想要的任何内容的标签


[如果我没有指出现在在PowerShell中这样做可能更好,那我就太失职了,但是…][/p>这里有一个未经测试的示例,它应该只告诉您与您唯一分配的IP地址关联的设备的接口名称

@Echo关闭
setLocalEnableExtensions
对于/F“Delims==”(““(设置接口)2>NUL”中的%%G,请设置“%%G=”
对于/F令牌^=4%%G In('%\uuuuu APPDIR\uuuuu%ROUTE.EXE-4 PRINT 0.0.0^
^|%\uuuu APPDIR\uuu%findstr.exe/RC:“0.0.0.0*0.0.0.0”Do(设置“InterfaceIP=%%G”
对于('%\uuu APPDIR\uuuu%netsh.exe接口IP显示路由中的/F令牌^=5*%%%H^
^|%__APPDIR_u%find.exe“%%G”是否设置“InterfaceName=%%I”)
如果未定义接口IP转到:EOF
设置界面和暂停
[编辑]

下面是我评论中示例的一个稍加修改的版本,它使用
ping.exe
而不是
ROUTE.exe
返回用于确定接口名称的IP地址

@Echo关闭
setLocalEnableExtensions
对于/F“Delims==”(““(设置接口)2>NUL”中的%%G,请设置“%%G=”
对于/F“Tokens=2 Delims=[]”%%G In(“^”%\uuuuuuuuuuuuu APPDIR\uuuuuuuuuu%ping.exe”%COMPUTERNAME%”^
-n 1-4 2^>NUL^ |%\uuuuuu APPDIR\uuuuuu%find.exe/I“%COMPUTERNAME%”Do(
在('%\uuuu APPDIR\uuuuu%netsh.exe)中为/F令牌设置“InterfaceIP=%%G”&^=5*%%%H^
接口IP显示路由^ |%_uappdir__%find.exe“%%G”
)设置“InterfaceName=%%I”)
如果未定义接口IP转到:EOF
设置界面和暂停


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

是的,这里没有powershell……代码无法运行。好吧,它只是退出…没有错误或任何东西你正在使用的操作系统没有PowerShell?甚至XP也有PowerShell。我写的代码在这里(Windows 10)很有效…我手头没有任何不受支持的操作系统(WinXP、Win7等)可供测试。我建议你在那里抛出一些
echo
语句,看看它偏离了轨道。在这里也使用windows 10…我将使用它,看看是否可以让它执行所做的更改:Insert required
setlocal enabledelayedexpansion
允许在其中解释
ifname
的更改值循环。将
%
更改为
允许访问更改的而不是原始值的
ifname
。备选方案:为%%c在(“以太网”“Wi-Fi”…)中嵌套第三个循环
,执行echo%%b | find%%c>nul&如果不是errorlevel 1 goto execute
将任何其他目标字符串添加到列表中,但“引用每个字符串”。这将尝试匹配
%%b
,如果找到该字符串,则将
errorlevel
设置为
0
,因此不为(1或更大),并触发GOTOI必须说,我有点困惑,因为如果“只有一个活动连接”,其接口名称有什么区别?你到底想确定什么?或者换句话说,根据返回的接口名,您的
if
命令将执行什么操作?出于某种奇怪的原因,netsh将其他“虚拟”适配器显示为活动/连接。因此,我基本上需要进行筛选,以获得物理连接(它们在if语句中使用默认名称)漂亮的解决方案,但是在只有静态ip集(只有DHCP)的情况下,它不起作用。我需要说明这两个原因。不过我喜欢这种方法。如果它能在静态ip情况下工作就好了。你的问题@james中不仅提到或暗示了这一点,因此不是回答要求;你能解释一下排除WMI的具体原因吗?或者你对WMI满意,只是对WMIC不满意?如果是,为什么?每当我在Windows10上运行wmic时,我都会收到一个拒绝访问错误。我希望该解决方案至少可以在windows 7和windows 10之间移植,而无需对操作系统进行任何更改。默认情况下,@james在其上或其下不受限制,因此这必须是特定于您的限制。您希望我们如何确定一种适用于任何可能有限制的机器的方法。什么是阻止管理策略限制
netsh.exe
?这项任务的实际目的是什么?不是你的脚本应该做什么?没有态度,我向你解释你的限制是少数人的,(这不是用户环境中的默认设置),那么是什么阻止其他少数人限制阻止你的脚本工作呢?另外,请注意,如果
=检查连接的可能性很小