批量读取含特殊字符的WiFi SSID及密码脚本问题求助
解决WiFi SSID提取的双引号包裹与特殊字符丢失问题
问题描述
使用批处理脚本提取已知WiFi的SSID和密码时,遇到两个问题:
- SSID未被双引号包裹,包含空格的SSID无法被正确识别;
- 包含感叹号等特殊字符的SSID会丢失特殊字符(如
1FRITZ!Box变成1FRITZBox)。
修正后的脚本
@ECHO OFF setlocal EnableExtensions DisableDelayedExpansion color 02 set "outputFile=others_%computername%.txt" REM 清空输出文件 type nul > "%outputFile%" REM 遍历所有WiFi配置文件,提取SSID for /f "tokens=4* delims=:" %%a in ('netsh wlan show profiles ^| findstr /R /C:"[ ]:[ ]"') do ( set "ssid=%%a" REM 去除SSID前后的空格 setlocal EnableDelayedExpansion set "ssid=!ssid:~1,-1!" REM 给SSID加上双引号 echo "!ssid!" REM 写入输出文件并提取密码 echo SSID: "!ssid!" >> "%outputFile%" echo # ================================================ >> "%outputFile%" netsh wlan show profiles name="!ssid!" key=clear | findstr /N /R /C:"[ ]:[ ]" | findstr 33 >> "%outputFile%" echo # ================================================ >> "%outputFile%" echo # Key content is the password of your target SSID. >> "%outputFile%" echo # ================================================ >> "%outputFile%" endlocal ) pause exit
关键修正点
- 避免特殊字符丢失:
给ssid变量赋值时关闭延迟扩展,仅在需要变量替换时临时启用,防止感叹号被当作延迟扩展语法解析而丢失。 - 双引号包裹SSID:
提取SSID后直接用"!ssid!"包裹,确保含空格或特殊字符的SSID能被netsh命令正确识别。 - 简化流程减少中间文件:
直接通过管道遍历netsh输出,无需生成temp.txt和helper.bat,避免中间文件处理带来的字符异常。 - 准确提取SSID:
使用delims=:按冒号拆分行,通过tokens=4*直接获取冒号后的SSID部分,再去除前后空格,修正原脚本中错误的字符串截取逻辑。
测试效果
对于输入行:
Profil fr alle Benutzer : 1FRITZ!Box Fon WLAN 7390
修正后的脚本会输出到目标文件中:
SSID: "1FRITZ!Box Fon WLAN 7390" # ================================================ Schlüsselinhalt : 你的WiFi密码 # ================================================ # Key content is the password of your target SSID. # ================================================
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

