如何使用 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 的替代方案:
从wmic获得帮助:
@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
从vbscript获得帮助:
<!-- ::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%
我想在 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 的替代方案:
从wmic获得帮助:
@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
从vbscript获得帮助:
<!-- ::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%