【问题标题】:Getting SSID in Windows 10 CMD script在 Windows 10 CMD 脚本中获取 SSID
【发布时间】:2019-04-10 09:00:50
【问题描述】:

我需要将 SSID 名称传递给我的简单脚本,主线如下

netsh wlan set profileparameter name="SSID" cost=variable

所以我知道我可以通过执行获取 SSID

Netsh WLAN show profiles

并查看“当前用户配置文件”行找到所需的值。 但是没有 grep 和 sed 我如何使用命令输出中的值?

附:我们的想法是使用本地 Windows 工具,而不是 CigWin 或 UNIX 服务,即尽可能不安装任何其他软件。

【问题讨论】:

  • 你所追求的可能是Select-String '\sSSID'。无法测试,因为我在这台机器上没有 WLAN。
  • (get-netconnectionProfile).Name 将返回连接的 SSID
  • 我对 [(get-netconnectionProfile).Name] 有一个奇怪的行为 - 我可以获取个人资料名称,但使用 [net sh wlan sh int] 我有一个不同的个人资料名称....所以唯一的方法工作是手动指定所有变量,即[netsh wlan set profileparameter name="$sSid" interfacealias="$iFace" cost=variable]
  • Drew - 这实际上切断了整个字符串,我在结果之后 - SSID 或配置文件名称。

标签: windows shell powershell cmd wifi


【解决方案1】:

使用for /f 循环来获取命令的输出。您可以使用适当的标记和分隔符来提取您想要的行的一部分,但是使用引号作为分隔符的语法有点奇怪:

for /f tokens^=2delims^=^" %%a in ('Netsh WLAN show profile "profilename"^|find "SSID-Name"') do set "SSIDa=%%a"
echo a: %SSIDa%

另一种可能性是使用冒号作为分隔符。但是你必须删除多余的空格和引号:

for /f "tokens=2 delims=:" %%a in ('Netsh WLAN show profile "profilename"^|find "SSID-Name"') do set "SSIDb=%%~a"
echo b: %SSIDb:~2,-1%

您还可以使用第二个for 来获取该行的最后一个标记(恰好是您想要的名称):

for /f "delims=" %%a in ('Netsh WLAN show profile "profilename"^|find "SSID-Name"') do for %%b in (%%a) do set "SSIDc=%%~b"
echo c: %SSIDc%

第四种可能性是使用tokens=3(带有标准分隔符),但这是一个不好(不安全)的选择,因为输出(标记的数量)可能会随着本地化而改变(另一方面,您的搜索字符串也会改变@987654327 @ 取决于本地化)。

【讨论】:

    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2011-05-27
    • 2017-01-13
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多