如何使用 cmd/bat 显示它所连接的网络的名称

How to display the name of the network to which it is connected using cmd/bat

我想在 cmd 中显示您连接的网络名称,我尝试创建一个脚本

netsh wlan show interfaces | findstr /C:"SSID:"

但是当我 运行 脚本显示这个结果时

SSID: networkname

我想要一种方法来只显示没有空格的网络名称,并且不显示单词 SSID:

使用 for /f:

for /f "usebackq tokens=2 delims= " %%N in (`netsh wlan show interfaces ^| findstr /C:"SSID:") do (
  set nw_name=%%N
  echo Found a network: !nw_name!
)

for 将在空格 (delims) 上拆分过滤后的 netsh 命令 (usebackq) 的结果,将采用第二个标记 (tokens), 然后你会在循环变量 %%N 中找到它。注意把它放在另一个变量中,因为一旦循环结束,%%N 就不再存在了。

有关详细信息,另请参阅命令提示符下的 for /?

我会提供一个使用 WMI 的替代方案:

获得帮助:

@For /F Tokens^=6^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe
 /NameSpace:\Root\StandardCimv2 Path MSFT_NetConnectionProfile Where
 "IPv4Connectivity='4' And Name Is Not Null" Get Name /Format:MOF 2^>NUL'
) Do @Echo %%G

获得帮助:

<!-- ::Script Language="Batch"
@For /F %%G In ('%SystemRoot%\System32\cscript.exe //NoLogo "%~f0?.wsf"')Do @Echo(%%G
@Pause&Exit /B
--><Job><Script Language="VBScript">
        Set objWMI = GetObject("WINMGMTS:\.\ROOT\StandardCimv2")
        WQL = "Select * From MSFT_NetConnectionProfile" +_
         " Where IPv4Connectivity='4' And Name Is Not Null"
        Set Instances = objWMI.ExecQuery(WQL)
        For Each Instance In Instances 
            Wscript.Echo Instance.Name
        Next</Script></Job>

如果您想要 SSID 使用您的初始命令,您应该知道 NetSh 的输出是表格格式,并且可以包含或排除 space 个字符。因此,我可能会提供这种方法:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "SSID=" & For /F "Tokens=1,* Delims=:" %%G In ('
 %SystemRoot%\System32\netsh.exe WLAN Show Interfaces 2^>NUL ^|
 %SystemRoot%\System32\findstr.exe /R /C:"^[ ][ ]*SSID[ ][ ]*:[ ][ ]*[^ ][^ ]*"'
) Do (Set "SSID=%%H" & SetLocal EnableDelayedExpansion
    For /F Delims^=^ EOL^= %%I In ("!SSID:~1!") Do EndLocal & Set "SSID=%%I")
If Defined SSID (Echo "%SSID%"
    Pause)
EndLocal
GoTo :EOF

使用相同的方法,您还可以改为隔离 Profile 名称:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "Profile=" & For /F "Tokens=1,* Delims=:" %%G In ('
 %SystemRoot%\System32\netsh.exe WLAN Show Interfaces 2^>NUL ^|
 %SystemRoot%\System32\findstr.exe /R
 /C:"^[ ][ ]*Profile[ ][ ]*:[ ][ ]*[^ ][^ ]*"') Do (Set "Profile=%%H"
    SetLocal EnableDelayedExpansion & For /F Delims^=^ EOL^= %%I In (
        "!Profile:~1!") Do EndLocal & Set "Profile=%%I")
If Defined Profile (Echo "%Profile%"
    Pause)
EndLocal
GoTo :EOF

根据我的经验,您可能会注意到,您的结果包含尾随 space,这可能会证明存在问题。因此,我建议您不要依赖 NetSh 的表格输出。

很高兴看到您已经有了答案。这是另一种方法,它将 运行 in a batch-file 运行 by cmd.

FOR /F "delims=" %%A IN ('powershell -NoLogo -NoProfile -Command ^
    "(Get-NetConnectionProfile | Where-Object InterfaceAlias -eq 'Wi-Fi').Name"') DO (SET "nw_name=%%~A")
ECHO %nw_name%