如何在CMD批处理中提取netsh输出的Key Content字段并输出或赋值为变量
实现方案
完全可以在不借助第三方工具的情况下实现,只用Windows系统自带的CMD原生命令即可完成。
最简直接输出版本
如果你不需要把密码存为变量,只需要单独打印Key Content行,直接用findstr过滤netsh的输出即可:
@echo off set /p name=Enter Wi-Fi Name: cls :: 中文系统请把"Key Content"替换为"关键内容" netsh wlan show profile name="%name%" key=clear | findstr /i "Key Content" cmd /k
执行后只会输出包含Key Content的那一行内容,不会展示其他冗余数据。
赋值为变量版本
如果需要把密码存为变量后续使用,可以用for /f命令解析过滤后的结果:
@echo off setlocal enabledelayedexpansion set /p name=Enter Wi-Fi Name: cls set "wifi_pwd=" :: 中文系统请把"Key Content"替换为"关键内容" for /f "tokens=2 delims=:" %%a in ('netsh wlan show profile name="%name%" key=clear ^| findstr /i "Key Content"') do ( set "wifi_pwd=%%a" :: 去除密码前多余的空格 set "wifi_pwd=!wifi_pwd:~1!" ) if "!wifi_pwd!"=="" ( echo 未找到名称为【%name%】的已保存WiFi配置,请检查输入名称是否正确 ) else ( echo WiFi名称:%name% echo WiFi密码:!wifi_pwd! ) :: 后续可以直接使用!wifi_pwd!变量调用密码 cmd /k endlocal
命令说明
findstr /i:CMD自带的字符串过滤命令,/i表示忽略大小写,只保留包含指定关键词的行for /f:用来解析文本/命令输出,这里以冒号为分隔符,提取Key Content行冒号后的密码部分setlocal enabledelayedexpansion:开启变量延迟扩展,保证for循环内修改的变量可以正常读取
内容的提问来源于stack exchange,提问作者Mazen Fisher
相关产品推荐
相关产品推荐

