如何用脚本批量导出WiFi配置?一文掌握核心技巧
目录导读
- 为什么需要批量导出WiFi配置?
- 批量导出的核心原理
- Windows环境下的脚本实现
- macOS/Linux环境下的脚本实战
- 跨平台通用方案:Python脚本
- 常见问题与解决方案(Q&A)
- 安全与隐私:导出后的配置如何保护?
为什么需要批量导出WiFi配置?
在企业或家庭网络环境中,我们经常遇到以下场景:

- 更换路由器后,需要重新输入数十个WiFi密码
- 需要批量备份公司内部200台电脑的WiFi配置
- 帮助亲友或客户快速恢复网络设置
用户痛点: 手动记录WiFi名称和密码效率极低,且容易出错,通过脚本批量导出WiFi配置,可以将原本需要2小时的工作压缩到5分钟内完成。
批量导出的核心原理
WiFi配置(SSID、密码、安全类型等)通常存储在操作系统的网络配置文件中:
- Windows:存储在
C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces\下的XML文件中 - macOS:存储在
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist - Linux:存储在
/etc/NetworkManager/system-connections/目录下
脚本的核心逻辑是遍历这些配置文件,提取SSID和密码字段,并输出为可读格式(如TXT或CSV)。
Windows环境下的脚本实现
1 使用批处理脚本(适合初学者)
@echo off
setlocal enabledelayedexpansion
echo 正在导出所有WiFi配置...
echo 结果将保存到当前目录下的 wifi_config.txt
(for /f "skip=3 tokens=1*" %%a in ('netsh wlan show profiles') do (
if "%%a"=="所有用户配置文件" (
set "ssid=%%b"
set "ssid=!ssid:~1!"
for /f "skip=2 tokens=2 delims=:" %%c in ('netsh wlan show profile name="!ssid!" key=clear') do (
if "%%c" NEQ "" (
set "password=%%c"
echo SSID: !ssid! 密码: !password!
)
)
)
)) > wifi_config.txt
echo 完成!共导出 !count! 个配置。
pause
2 使用PowerShell脚本(更灵活)
$profiles = netsh wlan show profiles | Select-String "所有用户配置文件" | ForEach-Object {
$_.ToString().Split(':')[1].Trim()
}
$result = foreach ($profile in $profiles) {
$details = netsh wlan show profile name="$profile" key=clear
$ssid = $profile
$password = ($details | Select-String "关键内容" | ForEach-Object { $_.ToString().Split(':')[1].Trim() })
[PSCustomObject]@{
SSID = $ssid
Password = $password
}
}
$result | Export-Csv -Path "wifi_export.csv" -NoTypeInformation -Encoding UTF8
Write-Host "已导出" $result.Count "个WiFi配置到 wifi_export.csv"
执行方法: 以管理员身份运行PowerShell,复制上述代码即可。
macOS/Linux环境下的脚本实战
1 macOS专用脚本
#!/bin/bash
# 导出macOS所有WiFi配置
echo "SSID,Password" > wifi_config_mac.csv
security find-generic-password -wa "AirPort" 2>/dev/null | while IFS= read -r line; do
# 提取SSID(需根据实际输出格式调整)
ssid=$(echo "$line" | grep -oP '(?<=").*?(?=")')
# 提取密码(需使用keychain工具)
password=$(security find-generic-password -wa "$ssid" 2>/dev/null)
echo "$ssid,$password" >> wifi_config_mac.csv
done
echo "完成!请查看 wifi_config_mac.csv"
2 Linux(NetworkManager)脚本
#!/bin/bash
# 适用于使用NetworkManager的Linux发行版
echo "SSID,Password" > wifi_config_linux.csv
for file in /etc/NetworkManager/system-connections/*; do
if [ -f "$file" ]; then
ssid=$(grep -oP '(?<=ssid=).*' "$file" | head -1)
password=$(grep -oP '(?<=psk=).*' "$file" | head -1)
if [ -n "$ssid" ] && [ -n "$password" ]; then
echo "$ssid,$password" >> wifi_config_linux.csv
fi
fi
done
echo "完成!共导出 $(wc -l < wifi_config_linux.csv) 个配置"
注意: 需要root权限运行:sudo bash wifi_export.sh
跨平台通用方案:Python脚本
以下Python脚本可在Windows/macOS/Linux上运行,自动识别当前系统:
import os
import subprocess
import platform
import csv
def export_wifi_windows():
"""Windows系统导出"""
output = subprocess.check_output(['netsh', 'wlan', 'show', 'profiles']).decode('utf-8')
profiles = [line.split(':')[1].strip() for line in output.split('\n') if "所有用户配置文件" in line]
configs = []
for profile in profiles:
details = subprocess.check_output(['netsh', 'wlan', 'show', 'profile', f'name={profile}', 'key=clear']).decode('utf-8')
password = "无密码"
for line in details.split('\n'):
if "关键内容" in line or "Key Content" in line:
password = line.split(':')[1].strip()
break
configs.append([profile, password])
return configs
def export_wifi_linux():
"""Linux系统导出"""
profiles_dir = "/etc/NetworkManager/system-connections/"
configs = []
for file in os.listdir(profiles_dir):
filepath = os.path.join(profiles_dir, file)
if os.path.isfile(filepath):
with open(filepath, 'r') as f:
content = f.read()
ssid = None
password = None
for line in content.split('\n'):
if line.startswith('ssid='):
ssid = line.split('=')[1]
if line.startswith('psk='):
password = line.split('=')[1]
if ssid:
configs.append([ssid, password or "无密码"])
return configs
def export_wifi_mac():
"""macOS系统导出(简化版)"""
print("macOS导出需额外配置keychain权限,建议使用bash脚本")
return []
def main():
system = platform.system()
if system == "Windows":
configs = export_wifi_windows()
elif system == "Linux":
configs = export_wifi_linux()
else:
print("macOS暂不支持此Python脚本,请使用bash脚本")
return
filename = "wifi_export.csv"
with open(filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['SSID', 'Password'])
writer.writerows(configs)
print(f"成功导出 {len(configs)} 个WiFi配置到 {filename}")
if __name__ == "__main__":
main()
使用方法:
- 保存为
export_wifi.py - 以管理员/root权限运行:
python export_wifi.py
常见问题与解决方案(Q&A)
Q1:脚本运行提示“拒绝访问”?
A:必须以管理员权限运行,Windows右键选择“以管理员身份运行”,Linux/macOS使用sudo。
Q2:导出的密码显示为“无密码”或空白?
A:部分企业WiFi使用802.1x认证,不存储明文密码,建议联系网络管理员获取。
Q3:如何只导出某个指定SSID的配置?
A:在脚本中添加过滤条件,例如修改Windows批处理脚本中的if "%%b"=="目标SSID"。
Q4:能否导出隐藏WiFi的配置?
A:可以,只要设备之前成功连接过,系统就会存储完整配置。
Q5:导出后的CSV文件乱码怎么办?
A:确保编码为UTF-8,Windows用户可使用Excel导入功能选择UTF-8编码。
安全与隐私:导出后的配置如何保护?
重要提醒: 导出的WiFi密码文件非常敏感,切勿随意分享或上传到不安全的位置。
安全建议:
- 导出后立即对文件进行加密(如使用7-Zip设置密码)
- 使用后从回收站彻底删除文件(推荐使用
shred或cipher工具) - 不要在公共网络(如公司内部群、邮件)中传输
- 建议使用临时生成的账号密码进行传输,使用后立即修改
通过以上脚本,您可以快速批量导出当前设备上所有已保存的WiFi配置,无论是Windows、macOS还是Linux系统,都能找到合适的方案,推荐优先使用Python脚本(跨平台)或PowerShell脚本(Windows深度用户)。
思考: 如果每次导出都需要管理员权限,是否可以考虑设计一个更安全的、无需root的脚本版本?欢迎在评论区讨论您的想法。