# 保哥笔记 — Windows系统 > 本分片含 4 篇文章,按发布日期倒序。全部分片索引见 https://zhangwenbao.com/llms-full.md **站点**:https://zhangwenbao.com/ **分类**:Windows系统 **生成**:2026-09-12 13:06:31 CST --- ## Navicat 10.1.7注册码怎么填?激活排查与合规替代方案 - URL:https://zhangwenbao.com/navicat-10-1-7-registration-code.html - 分类:Windows系统 - 发布:2019-11-11 | 更新:2026-06-02 - 摘要:本文解析Navicat for MySQL 10.1.7的版本定位与适用场景,详解三处都填同一注册码的激活方法,覆盖空格残留、权限不足、版本不对、杀毒拦截、时间被调五种注册失败的排查,并对比DBeaver、HeidiSQL、MySQL Workbench等合规免费替代方案。 - 关键词:EXCEL,Navicat,MySQL > **TLDR**:摘要:本文先讲清Navicat for MySQL 10.1.7是什么版本、适用什么场景,再给三处都填同一注册码的激活步骤,覆盖空格残留、权限不足、版本不对、杀毒拦截、系统时间被调五种注册失败的排查,过一遍它的核心功能,最后给版权合规建议和DBeaver、HeidiSQL、MySQL Workbench等免费替代方案。 > 摘要:本文先讲清Navicat for MySQL 10.1.7是什么版本、适用什么场景,再给三处都填同一注册码的激活步骤,覆盖空格残留、权限不足、版本不对、杀毒拦截、系统时间被调五种注册失败的排查,过一遍它的核心功能,最后给版权合规建议和DBeaver、HeidiSQL、MySQL Workbench等免费替代方案。 保哥这台办公电脑的“古董抽屉”里至今还压着一份 Navicat 10.1.7 的安装包,主要给某些只跑 MySQL 5.1 旧版本的老项目调试用。新版 Navicat 在连接十几年前的 MySQL 实例时偶尔会因为字符集协议差异出现奇怪的乱码或者认证失败,反倒是 10.1.7 这种“老搭档”最稳定。这篇文章把保哥这些年使用 Navicat 10.1.7 的完整经验、注册码填写方法、版本兼容性、典型报错排查、以及更重要的版权合规建议整理一遍,方便有同样需求的开发者少走弯路。 话先说在前面:本文里提到的旧版注册码仅供个人学习、研究老项目兼容性使用。任何在生产环境、商业开发、外包客户项目里使用都涉嫌违反《计算机软件保护条例》和《著作权法》。一旦被审计或竞争对手 (https://zhangwenbao.com/competitor-outranking-seo-analysis-strategy.html)举报,企业可能面临法律诉讼和高额赔偿。如果你只是想要一款好用的数据库管理工具,本文后半段会给你列一组 100% 合规免费且体验和 Navicat 几乎相当的开源替代品。 ## Navicat 10.1.7 是什么版本,适用什么场景 Navicat for MySQL 是 PremiumSoft(卓软)公司出品的一款专为 MySQL 和 MariaDB 打造的数据库管理工具。它提供类似 Microsoft SQL Server Management Studio 的图形化界面,可以直观地建库建表、写 SQL、做备份恢复、设计 ER 图、写存储过程,是国内大量 PHP 和 Java 开发者的入门首选。 10.1.7 属于 Navicat for MySQL 的 10.1 版本系列,发布时间大约在 2013 年前后,对应的 MySQL 版本支持范围是 5.0 到 5.6,正是 PHP 5.3 到 5.5、Discuz (https://zhangwenbao.com/discuz-global-variables-details.html) 7.x、织梦 DedeCMS (https://zhangwenbao.com/dedecms-commonly-used-batch-sql-statements.html) 5.7、ThinkPHP 3 那一波 PHP 老程序最流行的年代。这个版本的好处保哥总结为四条: 第一,体积小。安装包不到 20MB,解压安装后整个目录大约 60MB。和现在 Navicat Premium 17 动辄 400MB 安装包形成鲜明对比。在硬盘只有 128GB 固态的老开发机上,省下来的空间相当可观。 第二,启动快。在 2013 年的 i3 笔记本上从双击图标到出现连接窗口只需要 1.5 秒,比现在的 Navicat Premium 17 在 i7 上的启动速度还快。这是因为它没有引入云同步、AI 助手、协作功能这一长串后期添加的模块。 第三,老协议兼容好。MySQL 4.1 早期的认证方式、MySQL 5.0 的 latin1 默认字符集、MySQL 5.5 的部分行为,10.1.7 都能不报错地直接连上。新版 Navicat 在面对这些古早协议时会偶尔出现连接超时或者乱码。 第四,离线可用。10.1.7 完全不依赖任何在线服务,没有云同步,没有账户登录,没有遥测上报。在隔离网络环境下也能正常用。 对应的缺点也明确:不支持 MySQL 8.0 的 caching_sha2_password 认证插件、不支持 SSL 1.3、UI 是 Windows 7 风格的 Aero 外观、不支持 4K 高分辨率(在 4K 屏上字体会糊)、对 InnoDB 表的 JSON 列显示不友好。所以保哥目前的用法是:处理 MySQL 5.x 的老库用 10.1.7,处理 MySQL 8.x 新库或云数据库用 Navicat Premium 16 或 17 的正版授权。两个版本可以共存安装,安装目录和注册表项都是分开的,互不干扰。 ## 注册码的填写步骤 保哥严格说明一遍:以下方法仅适用于个人学习、测试老项目兼容性等场景。任何商业用途请购买正版授权。Navicat 官方对个人版有非常优惠的教育定价和小型团队定价,比起冒着法律风险使用未授权版本,正版的安心程度高出太多。本节给出步骤是为了帮你理解软件激活机制,不构成对盗版使用的鼓励。 安装好 Navicat 10.1.7 后,第一次启动会弹出一个“试用”与“注册”选项的对话框。按以下步骤操作: 第一步,点击主菜单栏的“帮助”(英文界面是 Help)。第二步,在下拉菜单里选择“注册”(Registration)。第三步,弹出的注册窗口中有三个输入框:姓名(Name)、组织(Organization)、注册码(Registration Key)。第四步,三个框分别填入以下内容(仅供学习参考): Name: NAVN-LNXG-XHHX-5NOO Organization: NAVN-LNXG-XHHX-5NOO Key: NAVN-LNXG-XHHX-5NOO 第五步,点击“激活”(Activate)或“确定”(OK)按钮。第六步,软件会提示注册成功,重启 Navicat 即可看到“关于”窗口里显示已注册状态。 这里有一个细节经常被忽略:Name 和 Organization 也要填注册码本身,不是“随便填一个名字、注册码只填到第三行”那样。早期网上很多教程没说清楚,导致初学者反复尝试都失败。三个框都填同一串字符,是这个版本注册算法的特性,不是巧合也不是 bug。 ## 注册不成功的常见原因排查 保哥被朋友问过最多的就是“我按你说的填了,怎么还是显示未注册”,这里把常见原因按出现频率排序列一遍。 第一种,复制时多了空格或换行。从网页或者 PDF 复制注册码时,前后或中间夹带了不可见字符(比如 Unicode 零宽空格、回车符),导致校验失败。建议复制完后粘贴到记事本里看一眼,或者干脆手动敲一遍。手动敲的时候要注意 0(数字零)和 O(字母 O)的区分,X 是大写的字母 X 不是数字 4。 第二种,Navicat 以管理员身份运行权限不足。注册信息会写入注册表HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Registration分支,如果当前用户没有写权限就会注册失败。解决方法是右键点击 Navicat 快捷方式,选择“以管理员身份运行”。如果还不行,再去注册表手动给 PremiumSoft 这个分支加完全控制权限。 第三种,安装的不是 10.1.7 而是 10.x 其他版本。这串注册码只对应 10.1.7 这一个具体版本号,10.0.x、10.1.6、10.1.8、10.1.9 的算法略有不同,注册码不通用。下载前请确认版本号一致。如果你下载到的安装包文件名是 navicat101_mysql_cs.exe 但实际安装出来是 10.1.5,说明文件被改名了,需要重新找正确的 10.1.7 版本。 第四种,杀毒软件拦截。某些杀毒软件(特别是国内的 360、火绒、腾讯电脑管家)会把破解版 Navicat 的注册激活模块识别为“修改主程序行为”从而阻断写入。临时关闭杀毒软件再尝试一次即可,或者把 Navicat 安装目录加入信任列表。Windows Defender 在 Win10/Win11 上也会偶尔拦截,可以在“Windows 安全中心 → 病毒和威胁防护 → 管理设置 → 排除项”里把安装目录加进去。 第五种,系统时间被调过。Navicat 10.1.7 的部分校验逻辑会读系统时间,如果你的电脑时间被调到了 2030 年或者 1999 年,校验会异常。把系统时间改回当前真实时间再注册即可。 ## Navicat 10.1.7 的核心功能概览 虽然版本老,但 10.1.7 在日常使用上已经覆盖了 90% 的 MySQL 运维场景。保哥按使用频率排序如下。 ## 数据库连接管理 点击左上角“连接”按钮,输入主机、端口、用户名、密码,几秒钟就能挂上一个 MySQL 实例。10.1.7 支持普通 TCP/IP 连接、SSH 隧道、HTTP 隧道三种模式。SSH 隧道这个功能在内网渗透或访问没有公网 IP 的内网 MySQL 时特别有用,避免了开放 3306 端口的安全隐患。SSH 隧道支持密码认证和密钥认证两种,密钥文件路径填本地.pem或.ppk都行(PPK 是 PuTTY 的格式,需要先转成 OpenSSH 格式或者让 Navicat 自己识别)。 HTTP 隧道用得少,主要场景是托管空间限制 3306 端口但允许 HTTP 上传 PHP 脚本的情况,可以通过把 ntunnel_mysql.php 放到目标空间作为隧道入口。这个功能在 2010 年前后的虚拟主机时代非常实用,现在云服务器普及后基本退役了。 ## SQL 编辑器 按 F6 或在工具栏点击“查询”按钮可以打开 SQL 编辑器,支持语法高亮、关键字自动补全、表名和字段名提示。10.1.7 的补全速度比新版还要快,大概是因为索引算法相对简单。但缺点是不支持现代 SQL 语法的高亮(比如 WINDOW 函数、CTE 公共表表达式),写新语法时高亮会失效但不影响执行。 编辑器支持多标签页、查询结果导出 Excel/CSV、SQL 美化(右键 → 美化 SQL)。导出 Excel 时遇到大于 65536 行的结果集会自动分多个 sheet,单 sheet 最多 65536 行(Excel 2003 格式限制)。如果需要导出更大的结果集,可以选“导出 XLSX 格式”,单 sheet 上限会提到 1048576 行。 ## 数据传输与备份 “工具 → 数据传输”可以把一个数据库整体复制到另一个数据库,跨服务器也行。这个功能在数据库迁移、生产数据同步到测试环境时非常方便。它会自动处理外键依赖关系,按正确的顺序传输表数据,不会因为外键约束导致传输失败。 “工具 → 备份”生成的是 Navicat 专有格式的备份文件(.psc文件),只能用 Navicat 恢复。如果要做跨工具备份,请用“转储 SQL 文件”功能导出标准 SQL,得到的.sql文件可以用任何 MySQL 客户端导入。保哥的建议是关键数据库每周用 psc 格式做一次内部备份、每月用 SQL 格式做一次跨工具备份,两套机制并存最稳。 ## ER 模型设计器 “工具 → 模型”打开 ER 图设计窗口,可以拖拽建表、画外键关系,最后正向工程生成 SQL。这个功能在做新项目数据库设计时非常实用,比手画思维导图或者用 Visio 画 ER 图直观得多。模型保存为.ndm2文件,可以用 Git 做版本管理(但 diff 是二进制 diff,可读性差,建议同时保留一份导出的 SQL 文件作为可读版本)。 ## 计划任务 保哥早期用 Navicat 的计划任务做过一些定时备份,配置很简单:选好要备份的库、设置每天几点执行、保存任务即可。但要注意 Navicat 的计划任务依赖电脑开机才能跑,服务器上还是建议用 mysqldump 加 crontab 那一套。这套机制只适合本地开发机器定时备份个人项目,不适合生产环境。 ## 数据导入导出 支持从 Excel、CSV、TXT、XML、DBF 等多种格式导入数据到表,也支持反向导出。导入向导很友好,可以预览前 100 行数据再确认字段映射。一个常见的坑是 Excel 文件里的日期列在导入时会变成 1900 年的某个日期,原因是 Excel 内部用序列数存日期但 Navicat 把它当数字读。解决方法是导入前先在 Excel 里把日期列设置成文本格式,或者在 Navicat 的字段映射步骤里把目标字段改成 VARCHAR 后再单独转换。 ## 版权合规建议(保哥重点想说的话) 这一节是这篇文章里最重要的部分,保哥希望你认真看完。 Navicat 是 PremiumSoft 的商业软件,任何未经授权的注册码使用都涉嫌违反《计算机软件保护条例》和《著作权法》。把破解版用于商业生产环境,一旦被审计或竞争对手举报,企业可能面临法律诉讼和高额赔偿。2024 年到 2025 年保哥个人就听说过两起企业因为审计发现使用未授权 Navicat 被罚的案例,赔偿金额分别是 36 万元和 58 万元,远高于正版授权的支出。 开源数据库 IDE 有非常多的优秀替代品,下面是保哥实测过、可以直接替代 Navicat 的免费方案。 ## DBeaver Community 保哥目前主力使用的工具。支持几乎所有主流数据库(MySQL、PostgreSQL、Oracle、SQL Server、SQLite、MariaDB、ClickHouse、MongoDB),跨平台(Windows、macOS、Linux),社区活跃,每月都有更新。体验上和 Navicat 95% 相似,多数据库支持反而更全。唯一的缺点是基于 Eclipse 框架,启动稍慢(大约 4 到 6 秒),高分辨率屏幕下偶有字体渲染问题。但整体瑕不掩瑜,强烈推荐。 ## HeidiSQL 轻量级、Windows 原生、专注 MySQL 和 MSSQL。绿色免安装版只有 10MB,比 Navicat 还轻。UI 是经典 Win32 风格,启动只需 0.5 秒,老电脑也能流畅运行。功能上略不如 DBeaver 全面,但日常 MySQL 运维完全够用。如果你只用 MySQL 且需要一款极致轻便的工具,HeidiSQL 是首选。 ## MySQL Workbench Oracle 官方出品,免费,ER 图功能强。这是 MySQL 官方推荐的图形化管理工具,原生支持所有 MySQL 新特性(包括 8.0 的 caching_sha2_password、JSON 函数、窗口函数等)。但启动稍慢、内存占用偏高、UI 不如 Navicat 直观。适合需要做数据库设计、性能调优、复杂 SQL 开发的场景。 ## phpMyAdmin Web 端工具,无需安装客户端,浏览器打开就能用。适合服务器端临时管理 MySQL 数据库的场景。但安全风险较高(暴露在公网容易被扫描攻击),生产环境如果要用 phpMyAdmin (https://zhangwenbao.com/phpmyadmin-import-large-sql-files.html),一定要加上 HTTP 基本认证、IP 白名单、随机化 URL 路径这三层防护。 ## DataGrip 试用版 JetBrains 家族出品,30 天免费试用。如果你已经在用 IntelliJ IDEA Ultimate 或者 PhpStorm,DataGrip 的功能已经集成在这些 IDE 里,不需要单独购买。DataGrip 的智能补全和重构能力是所有数据库工具里最强的,适合每天写大量复杂 SQL 的开发者。 保哥目前主力用的是 DBeaver Community,备用 HeidiSQL 处理快速查询。两个加起来覆盖了我 99% 的数据库操作需求,且完全免费合规。如果团队预算允许,Navicat 官方近几年推出了 Navicat 16 及更高版本的非永久许可(订阅制),按年付费,价格比一次性买断便宜不少;学生和教育用户还有专门的折扣。具体可以去 Navicat 官网查看 Pricing 页面。 ## 保哥的实际使用建议 综合上面的内容,保哥给到的最终建议是分场景区别对待。 场景一:临时调试一个老项目,连接的是 2014 年之前的 MySQL 5.x 实例,并且本地没有任何敏感生产数据。可以暂时使用 10.1.7 配合上面的注册码完成工作,但工作结束后请务必卸载或更换为正版。 场景二:企业内部 DBA、外包公司开发,或者会用 Navicat 处理客户的真实业务数据。强烈建议直接购买正版授权,一年的订阅费用通常比一次商业纠纷的律师费便宜得多。Navicat Premium 订阅版年费约 1800 元,对于一个开发团队是非常划算的支出。 场景三:预算实在紧张,无法购买正版。优先选用 DBeaver Community 或 HeidiSQL,这两款工具的体验已经完全可以替代 Navicat 日常使用,不存在任何法律风险。学习曲线大约 1 到 2 天,迁移配置文件也比较简单。 场景四:自由职业者,需要处理多个客户的数据库。建议每次都用客户提供的工具或者免费工具操作客户数据,自己电脑上不留 Navicat。这样避免了“在 A 客户机器上注册的 Navicat 在 B 客户环境下被发现是同一份激活信息”这种尴尬场景。 ## 常见问题解答 ## Navicat 10.1.7 能连接 MySQL 8.0 吗 不能直接连接。MySQL 8.0 默认使用 caching_sha2_password 认证插件,10.1.7 那个时代还没有这个插件。如果你必须用 10.1.7 连 8.0,可以在 MySQL 端把目标用户的认证插件改回 mysql_native_password:执行 SQL 语句ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';然后FLUSH PRIVILEGES;即可。但这样做会降低安全性,因为 mysql_native_password 的 SHA1 哈希在现代密码学标准下已经不够安全。正式环境不推荐这样做。建议直接升级到 Navicat 16 或更高版本,或者改用 DBeaver Community 这种原生支持 caching_sha2_password 的工具。 ## 使用未授权注册码会被检测吗 Navicat 官方早期版本几乎不会主动联网检测,但 10.x 之后的版本会偶尔向官方服务器校验授权。10.1.7 属于几乎不联网校验的范畴,所以这串老注册码至今还能用。但请注意,官方完全有能力通过 IP 加 MAC 黑名单等方式追溯,企业用户尤其要警惕。如果你的公司被审计或者被竞争对手举报,未授权使用商业软件的证据是可以从机器上提取出来的(包括安装时间、激活记录、内部 GUID)。从风险管理的角度看,企业场景必须使用正版授权。 ## 注册成功后软件提示试用期已过怎么办 这是因为系统时间被 Navicat 记录过一次,在某些组合下试用计时优先于注册校验。解决方法是删除注册表HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Registration和HKEY_CURRENT_USER\Software\Classes\CLSID\{某个GUID}\Info下的相关键,然后重新输入注册码。具体 GUID 每台机器不同,建议用 Process Monitor 工具监控 Navicat 启动时读取的注册表项后再删除。也可以更暴力一点:完全卸载 Navicat、删除安装目录、删除所有 Navicat 相关注册表项、重启电脑、重新安装。这种全清做法 99% 能解决试用期残留问题。 ## 有没有办法不破解就长期免费用 Navicat 官方没有提供完全免费的永久版本,14 天试用到期之后就只能购买授权或卸载。如果想长期免费,请使用 DBeaver Community、HeidiSQL、MySQL Workbench 这些真正开源或永久免费的工具,体验上没有本质差距。保哥从 2020 年开始全面切换到 DBeaver Community,至今几乎没有遇到过 DBeaver 不能解决的数据库管理任务。从合规和长期可持续的角度,开源工具是更好的选择。 ## Navicat 10.1.7 在 Windows 11 上还能跑吗 能跑,但需要兼容模式。右键 Navicat 快捷方式 → 属性 → 兼容性 → 勾选“以兼容模式运行这个程序”并选择 Windows 7。然后再勾选“以管理员身份运行此程序”。这样设置后大部分功能都能正常使用。已知问题是:4K 屏下字体会糊(可以勾选“更改高 DPI 设置 → 替代高 DPI 缩放行为 → 应用程序”改善)、暗色模式不完整、Windows 11 的圆角窗口在 Navicat 主窗口上不生效。这些都是显示层面的问题,不影响数据库操作。 ## 注册码是 NAVN-LNXG-XHHX-5NOO,输入后还是说无效,是不是注册码失效了 不是注册码失效,大概率是版本不对或者复制时夹带了不可见字符。按以下顺序排查:先看 Navicat 的“关于”界面确认版本号是 10.1.7(不是 10.1.5 或 10.1.9);然后把注册码手动敲一遍而不是复制粘贴;如果还不行,以管理员身份运行 Navicat;最后检查杀毒软件是否拦截了注册表写入。99% 的注册失败都是这四个原因之一,按顺序排查即可。 ## 除了 NAVN-LNXG-XHHX-5NOO 还有别的注册码可以用吗 有,但保哥不建议传播。10.1.x 时代流传过几组注册码,比如 NAVK-Y73L-OG3D-K78K、NAVL-SXMK-BVK4-EUKO 等。这些注册码的有效性取决于 Navicat 内部的校验算法和黑名单机制。本文给出 NAVN-LNXG-XHHX-5NOO 是因为它在公开渠道流传最广、几乎所有 10.1.7 安装包都能识别。其他注册码可能已经被官方加入黑名单而失效。再次强调,注册码本身只是技术演示,真正的合规路径是购买正版或使用开源替代。 ## 我装了 Navicat 10.1.7 后发现公司每个月都收到 Navicat 的发票要不要继续用 立刻停止使用。公司收到 Navicat 发票说明已经有正版授权,这种情况下你完全可以申请 IT 给你分配一份正版许可证,而不是冒险用 10.1.7 这种历史版本。继续使用未授权版本可能被纳入 IT 审计黑名单,影响你在公司的合规记录。立刻卸载 10.1.7,向 IT 部门申请使用正版 Navicat Premium 即可。 ## 腾讯视频qlv转mp4实战:copy/B合并缓存全过程 - URL:https://zhangwenbao.com/tencent-video-files-are-downloaded-and-converted-to-mp4-format.html - 分类:Windows系统 - 发布:2018-05-28 | 更新:2026-06-02 - 摘要:腾讯视频qlv文件转mp4实战指南:详解qlv加密原理、vodcache缓存定位、tdl分片合并的copy /B命令、ffmpeg二次封装修复索引。文章含批处理脚本、爱奇艺优酷B站等多平台对比、ffmpeg剪辑压缩等扩展用法。 - 关键词:索引,缓存 > **TLDR**:摘要:想把腾讯视频缓存的qlv文件转成能正常播放的mp4?本文讲清qlv的加密原理、vodcache缓存目录怎么定位、tdl分片用copy命令合并、再用ffmpeg二次封装修复索引,配批处理脚本,再对比爱奇艺和优酷和B站等多平台的同类做法,以及ffmpeg剪辑压缩的扩展用法。 > 摘要:想把腾讯视频缓存的qlv文件转成能正常播放的mp4?本文讲清qlv的加密原理、vodcache缓存目录怎么定位、tdl分片用copy命令合并、再用ffmpeg二次封装修复索引,配批处理脚本,再对比爱奇艺和优酷和B站 (https://zhangwenbao.com/bilibili-seo-search-recommendation-ranking-guide.html)等多平台的同类做法,以及ffmpeg剪辑压缩的扩展用法。 保哥早些年帮一位做培训课程的客户处理素材时,第一次撞上腾讯视频的qlv格式。当时客户付费购买了腾讯视频的会员,下载了一批讲座视频准备做二次剪辑,结果文件全部是qlv后缀,离开腾讯视频客户端就无法播放,更别说丢进剪辑软件里处理了。从那以后,保哥前前后后帮十几个朋友处理过类似的需求,也踩过不少坑。今天这篇就把保哥这几年总结下来最稳的一套qlv转mp4流程整理出来,从原理到操作再到常见问题,一次讲透。 ## 一、qlv究竟是个什么格式,为什么不能直接播放 保哥先把基本概念说清楚,理解了底层原理,操作起来才不会手忙脚乱。qlv是腾讯视频自家定义的一种封装格式,它本质上并不是一种新的视频编码,而是把已经编码好的视频数据(通常是H.264)外面套了一层加密壳。这层壳有两个作用,一是绑定腾讯视频客户端,二是配合DRM做版权保护。 这就解释了为什么你拿到qlv文件以后,VLC、PotPlayer、暴风影音通通拒绝播放,连ffprobe探测格式都会报错。腾讯视频客户端在播放qlv时,会先在内存里把外层加密剥掉,再把裸流交给底层解码器渲染,所以你只能在客户端里看。 但有意思的是,腾讯视频在缓存视频的时候,并不是直接把qlv文件丢到磁盘上,而是把视频流切成一个一个小分片,每个分片以tdl为后缀存在本地。这些分片文件保哥实际测试过,绝大多数情况下就是没有加密的H.264加AAC裸TS数据,按顺序拼接起来就是一段完整可播的视频。我们今天利用的就是这个特性。 理解这个机制非常重要,因为它意味着我们不是在"破解"qlv(那需要逆向工程),而是在利用腾讯视频缓存机制的"中间态"。这个中间态的TS分片是不加密的,所以copy/B合并出来的文件可以正常播放。这套方法10年没大改,原因就是腾讯视频底层的缓存设计没动过。 ## 二、准备工作:先确认缓存文件夹的位置 保哥处理这类需求的时候,第一步永远是先把要下载的视频在腾讯视频客户端里完整在线播放一遍。注意这里说的是"在线播放",不是点击下载按钮。完整播放完,意味着所有的tdl分片都已经被腾讯视频缓存到本地了,缺一段都会导致最终合并出来的mp4在那个位置卡顿或者花屏。 播放完以后打开腾讯视频客户端右上角的"设置",找到"下载设置"这一栏,里面会显示一个"缓存目录"。这个目录默认通常是在C盘的用户目录下,但很多朋友会把它改到D盘或者E盘,所以一定要以你客户端里实际显示的为准。 保哥建议把缓存目录复制下来贴到记事本里,因为后面在CMD里cd的时候要用到完整路径。缓存目录下面会有一个名字很长的文件夹,由一串字母和数字混合组成,这个就是腾讯视频对当前用户的唯一标识目录。进去以后你会看到一个叫vodcache的子目录(部分版本写作vodcahe,是个历史拼写遗留,腾讯一直没改),所有缓存的视频分片都按视频维度分别存放在这里。 我自己平时把缓存目录统一设到D盘的TencentVideo文件夹下,方便管理也避免C盘空间被吃光。一个2小时的高清电影缓存大概1到2GB,如果你经常下东西,C盘很快就满了。 ## 三、找到目标视频对应的tdl分片文件夹 进入vodcache以后,你会看到很多个子文件夹,每个文件夹对应一个被缓存过的视频。问题来了,文件夹名字也是一串无意义的哈希值,怎么知道哪个对应你刚才看的那个视频? 保哥的做法是看"修改日期"这一列。你在Windows资源管理器里按修改时间倒序排序,最顶上那个就是你刚才在线播放的视频。如果你担心顺序不对,可以右键看看"属性"里的大小,正常一段30分钟的高清视频,缓存夹的总大小通常在200MB到500MB之间。 确认好以后,进入这个文件夹,里面会看到大量以tdl为后缀的文件,文件名通常是数字加字符的组合,比如c123abc.tdl、c123def.tdl。注意这些文件的前缀是有规律的,同一段视频的所有分片都会共享同一个前缀字符。保哥见过最常见的前缀字符是c,但偶尔也会遇到以5、a、b开头的,具体看你的版本。 保哥提醒一个细节:有些朋友看到文件夹里同时存在tdl和tdl.tdl这种双后缀的,这是腾讯视频在断点续传时产生的临时文件,不影响合并。但如果你看到tmp后缀,说明分片还没下载完,需要回到客户端重新播放完整。 如果分片数量特别多(比如一个2小时电影可能有上百个分片),建议把文件夹整个复制到D盘其他位置再操作,避免合并失败时影响腾讯视频客户端的工作状态。我个人习惯把每次要处理的视频复制到D:\TempVideo文件夹,处理完成后再删除。 ## 四、用copy/B命令合并所有分片 确认前缀以后,按Win加R调出运行框,输入cmd回车进入命令行(保哥习惯用Win加R而不是右键菜单,因为速度更快)。然后切换到tdl文件所在的盘符,比如缓存目录在E盘就输入: E:回车后再用cd命令进入tdl文件夹的完整路径: cd E:\TencentVideo\vodcache\d8ksjdj9d8sjdksjd8注意如果路径里包含空格,需要用双引号把整个路径包起来,否则cmd会把空格当成参数分隔符报错。进入目录以后,执行下面这条命令: copy /B c*.tdl Video001.mp4这条命令的含义保哥拆开讲一下。copy是Windows内置的文件复制命令,斜杠B参数表示以二进制方式处理,避免Windows把文件当成文本去解释(默认斜杠A是ASCII模式,会在遇到0x1A字节时把它当成文件结束符截断,对二进制文件是灾难性的)。c星号tdl是通配符,表示把当前目录下所有以c开头、tdl结尾的文件按文件名顺序拼接。最后Video001.mp4是输出文件名,可以随便改。 这里最关键的就是前缀字符要替换成你实际看到的那个。你要下载的那个视频缓存夹下面所有tdl文件的开头第一个字符是什么,命令里就写什么。如果开头是5,命令就是copy /B 5.tdl Video001.mp4;如果开头是a,就是copy /B a.tdl Video001.mp4。保哥早期帮人处理的时候有一次没注意,文件夹里同时存在c开头和a开头的两组分片(来自两个不同的视频),用通配符星号tdl的结果是合出来的mp4前10分钟和后20分钟完全是两个不同的视频,画风极其魔性。所以前缀这一步不能偷懒。 合并速度跟硬盘性能有关,HDD大概几十秒,SSD一般几秒就完成。命令执行完会显示"已复制 N 个文件",N就是参与合并的分片数量。如果显示数量明显小于你看到的tdl文件数,说明前缀字符筛漏了,重新检查。 ## 五、验证合并结果与可能遇到的问题 命令执行完毕,目录下会多出一个mp4文件。保哥一般会先用PotPlayer拖进去试播,如果开头几秒钟正常、中间不花屏、结尾没有突然黑屏,基本就算成功了。 如果遇到问题,保哥按踩坑频率从高到低列一下解决思路: 问题一:中间画面卡住声音继续 如果合并出来的视频前几秒正常但中间画面卡住、声音继续,多半是中间某一段分片没下载完整。回腾讯视频客户端把这段视频重新拖到对应位置再播放一遍,让客户端把缺失分片补全,然后再执行copy/B。 问题二:整段视频根本无法播放 提示"格式错误",先用ffprobe看一下: ffprobe -v error -show_format Video001.mp4如果ffprobe报"Invalid data found when processing input",说明合并顺序乱了。保哥的经验是,绝大多数情况下copy /B通配符是按文件名字典序合并的,腾讯视频的分片命名也是按字典序递增设计的,所以一般不会乱。但极少数版本里分片命名不是严格递增的,这时候你需要先用资源管理器把文件名按"修改时间"排序,确认一下时间序和字典序是不是一致的。如果不一致,需要手动调整文件名前缀加序号再合并。 问题三:新版本加密了 部分较新的腾讯视频版本(保哥测过11.x以上)开始对tdl分片做轻量加密,简单copy/B出来的文件会有一层异或扰动。这种情况下需要用第三方工具,比如开源的qlv2mp4项目(GitHub上能搜到)批量处理。但保哥个人不太推荐,一是工具更新慢,二是涉及版权风险,自己用没问题,传播就是另一回事了。 问题四:能播但拖不动进度条 如果合并后的mp4在PotPlayer里能播但拖不动进度条,说明mp4缺少moov原子(索引),这是因为tdl分片本质是TS流,直接copy/B出来的其实是个TS容器伪装成mp4后缀。要解决这个问题,需要再用ffmpeg重新封装一次: ffmpeg -i Video001.mp4 -c copy -movflags +faststart Output.mp4c copy表示不重新编码,只重新封装,速度极快。movflags faststart把moov原子写到文件头部,这样后续放到网页或者CDN上拖动进度条会非常顺畅。这一步保哥强烈建议加,剪辑软件如PR、达芬奇也只有看到完整moov才能正常时间轴显示。 ## 六、批处理多个视频的脚本 如果你需要处理多个视频,每次手动敲命令很繁琐。我写过一个简单的bat脚本,自动处理整个vodcache目录下的所有视频: @echo off setlocal enabledelayedexpansion cd /d E:\TencentVideo\vodcache for /d %%d in (*) do ( cd "%%d" set count=0 for %%f in (*.tdl) do set /a count+=1 if !count! gtr 0 ( copy /B *.tdl "..\\%%d.mp4" >nul echo Merged %%d to %%d.mp4 ) cd .. ) echo All done. pause这个脚本会遍历vodcache下所有子文件夹,每个文件夹里如果有tdl文件就合并成对应名字的mp4,输出到vodcache根目录。注意这种方式没有指定前缀,混入多个视频分片的目录可能合错,建议在干净的环境跑。 我自己用这个脚本处理过一次性下载的几十个网课视频,几分钟全部合并完成,比手动处理效率提升20倍以上。 ## 七、扩展:用ffmpeg做后续处理 合并出来的mp4只是第一步,实际工作中往往还需要做剪辑、压缩、加字幕、转换分辨率等后续处理。ffmpeg是这些场景的最强工具,下面列几个保哥常用的命令。 剪辑视频片段(截取5分钟到15分钟之间的内容): ffmpeg -i Video001.mp4 -ss 00:05:00 -to 00:15:00 -c copy Output_part.mp4-ss是开始时间,-to是结束时间,-c copy不重新编码,速度极快。如果剪辑边界不在关键帧上可能会有几秒钟黑屏,需要重新编码就去掉c copy换成c:v libx264。 压缩视频文件大小(适合上传给微信、邮件): ffmpeg -i Video001.mp4 -c:v libx264 -crf 28 -preset slow -c:a aac -b:a 128k Output_compressed.mp4-crf 28是恒定质量参数,数字越大文件越小画质越差,建议28到32之间。preset slow是编码预设,越慢压缩率越高。一般原文件500MB能压到100到150MB,肉眼观感差异不大。 转换分辨率(4K降到1080p): ffmpeg -i Video001.mp4 -vf scale=1920:1080 -c:v libx264 -crf 23 Output_1080p.mp4scale参数指定输出分辨率。如果原视频不是16:9宽高比可能会变形,加上force_original_aspect_ratio=decrease自动保持比例。 提取音频(mp4转mp3): ffmpeg -i Video001.mp4 -vn -c:a libmp3lame -b:a 192k Output.mp3vn表示不要视频流,c:a libmp3lame指定MP3编码器,b:a 192k是音频码率。提取出来的MP3适合做播客、笔记音频等用途。 加水印(右下角加logo图片): ffmpeg -i Video001.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" Output_watermark.mp4overlay的W-w-10是水平位置(视频宽度减logo宽度减10像素),H-h-10是垂直位置。这个命令在做版权保护时很有用。 把这些命令存到一个bat脚本里,按需要调用,能极大提升处理效率。我给团队整理过一份"ffmpeg速查手册",覆盖50多个常用场景,新人入职第一周就能上手处理大部分视频任务。 ## 八、关于版权与合理使用的提醒 保哥这篇文章的目的是技术分享,不是鼓励大家去搬运付费内容。腾讯视频上的内容大部分都有版权,把视频转出来以后做二次传播,无论是上传到自己的网站还是放到其它平台,都属于侵权行为,平台会追责,严重的会涉及刑事责任。 保哥自己用这套流程主要在两个场景:一是处理我自己作为版权方在腾讯视频上传的内容,腾讯视频后台原稿丢失需要应急回收;二是会员合理使用范围内的离线学习,比如付费购买的网课,下载下来在没有网络的环境(飞机、高铁地下段)观看。这两种用途是合理的,超出这个范围的用法保哥不予置评。 如果你是教育机构想让学员离线观看付费课程,建议直接联系腾讯视频企业服务,他们有专门的下载授权方案。这条路虽然要付费,但安全合规,避免后续法律风险。 ## 九、其他视频平台的类似处理思路 腾讯视频不是唯一一家用这种"在线缓存到本地分片"模式的平台。优酷、爱奇艺、芒果TV等主流视频网站都采用类似机制,区别只是分片格式和命名规则不同。 爱奇艺:缓存格式是qsv,分片以k开头,缓存目录在用户文档下的iqiyi子目录。合并方法跟tdl类似,但部分高清版本需要先解密。 优酷:缓存格式是cmaf,分片是标准的mp4容器,可以用ffmpeg直接合并:ffmpeg配合concat协议拼接所有分片。优酷的缓存目录通常在C:\Users\用户名\AppData\Local\Youku。 芒果TV:缓存格式是mgtv,分片以序号命名,可以用类似copy /B的方式合并。但芒果TV近年来加强了加密,简单合并可能失败。 B站:B站桌面客户端的下载文件直接是m4s分片(视频和音频分开),用ffmpeg合并:ffmpeg -i video.m4s -i audio.m4s -c copy output.mp4。B站还有一个开源工具叫BBDown,效率比手动合并高很多。 抖音/快手:网页端的视频URL一般是直接的mp4链接,用浏览器F12看Network面板就能找到,右键下载即可。不需要copy/B合并。 理解了"分片缓存"这个底层模式,处理任何视频平台都不难。核心就是找到本地缓存路径、识别分片命名规则、按顺序合并、用ffmpeg修复封装。这套方法保哥用了10年,从早期的迅雷看看到现在的腾讯视频,思路一脉相承。 ## 十、总结 整套流程就这么几步:把未加密的tdl分片用copy /B按字典序合并,再用ffmpeg重新封装修复索引,前后不到10分钟。偶尔下个网课、保存个会员视频做笔记,这套方法足够好用;要处理大批量视频,就封装成bat脚本自动化。腾讯视频的策略一直在变,文章里的命令和路径以保哥写稿时(2025年)的客户端版本为准,未来版本有调整,欢迎评论区告诉保哥,我会持续更新这篇内容。 最后再次提醒:本文方法仅限个人合理使用,请不要用于商业传播或侵犯他人版权。技术中立,使用方式由人决定,希望大家理性使用。 ## 常见问题解答 ## 为什么我打开vodcache文件夹是空的 保哥遇到过两种情况。一是腾讯视频开启了"播放完自动清理缓存"这个选项,需要在客户端设置里关掉。二是部分企业版Windows默认隐藏系统文件夹,需要在资源管理器查看菜单里勾选隐藏的项目。如果都不是这些原因,建议重启腾讯视频客户端、重新播放一段视频再确认缓存目录。 ## copy/B合出来的文件能直接上传B站或抖音吗 技术上能,但保哥强烈不建议。一是版权问题前面说过;二是直接copy/B出来的TS流缺少mp4索引,B站和抖音上传后转码会失败或者画质大幅劣化。如果一定要上传(比如自己原创的内容),先用ffmpeg加movflags faststart重新封装一遍,画质和兼容性都会好很多。 ## 能不能把这套流程做成自动化脚本 可以。保哥写过一个bat脚本,自动遍历vodcache目录、按修改时间找到最新文件夹、识别前缀、批量copy/B。但脚本依赖前缀的稳定性,腾讯视频每次大版本更新都可能改路径或加密策略,所以脚本需要持续维护,个人用户用手动方式反而更稳。文章第六节有简化版脚本可参考。 ## 腾讯视频客户端自带的格式转换功能为什么不能直接转mp4 这个功能只在腾讯视频会员体系内闭环,转出来的还是qlv或者一种叫tvk的内部格式,目的是绑定客户端播放,并不能转成标准mp4。所以走tdl合并这条路是目前最可行的方案。这也是腾讯视频版权策略的一部分,避免付费内容被轻易转出。 ## 合并后的mp4画质会不会比原qlv差 不会。tdl分片就是H.264原始码流,copy/B合并是无损操作(位级别复制),合并出来的mp4画质与qlv原始码流完全一致。如果你后面用ffmpeg重新封装(c copy模式),同样是无损的。只有当你用ffmpeg做转码(c:v libx264)才会涉及重新编码导致画质变化。 ## Mac或Linux系统能用类似方法处理吗 能。Mac上腾讯视频客户端不太成熟,建议在Windows虚拟机里处理。Linux完全没有腾讯视频客户端,无法用这套方法。如果你在Mac上有tdl文件(比如从Windows拷过去),可以用cat命令实现copy/B的效果:cat c*.tdl大于号Video001.mp4。注意cat的通配符默认按字典序合并,跟Windows的copy /B行为一致。 ## tdl分片文件可以单独播放吗 大部分情况下不能。单个tdl分片只是一段几秒到几十秒的视频片段,缺少完整的容器头信息,PotPlayer或VLC打开会显示"格式错误"。但如果你用ffmpeg强行解码(ffmpeg -i c123abc.tdl -c copy out.mp4),可能能输出几秒钟的视频,可以用来快速预览这段分片的内容。 ## 合并完之后原tdl分片可以删除吗 建议保留至少几天再删。一方面合并出来的mp4可能在播放时发现有问题需要重新合并;另一方面腾讯视频客户端会通过这些缓存文件做断点续传判断,删了之后下次想看同一个视频可能会重新缓存。如果磁盘空间紧张,可以先删除已经合并并验证过的视频对应的tdl文件夹,保留正在使用的。 ## 实用技巧相关阅读 同主题集群覆盖几个高频生产力实用技巧: - Photoshop启动弹警告完整方案 (https://zhangwenbao.com/how-to-fix-adobe-photoshop-disabled-warning.html)——4种解决办法对比实测 - Claude Code提效技巧20条 (https://zhangwenbao.com/claude-code-tips.html)——一线实战速查指南 - Vibe Coding实战教程 (https://zhangwenbao.com/vibe-coding-seo-tool-tutorial.html)——Cursor做出SEO工具 ## 权威参考资料 ## Win10默认应用老被重置怎么修?4套方案从PowerShell到注册表 - URL:https://zhangwenbao.com/windows10-automatically-resetting-associated-default-file-format.html - 分类:Windows系统 - 发布:2017-01-23 | 更新:2026-06-01 - 摘要:Windows 10默认应用关联被自动重置回内置UWP应用是Modern App协议校验机制导致。本文逐层讲清楚根因,给出PowerShell批量卸载内置UWP、企业组策略锁定、DISM导入XML、SetUserFTA绕过Hash校验4种修复方案,覆盖家用和企业场景。 - 关键词:PowerShell,WebP,PDF > **TLDR**:摘要:Windows 10的默认应用关联老被自动重置回内置UWP应用,根子在Modern App的协议校验机制。本文逐层讲清成因,给出四套修复——用PowerShell批量卸载内置UWP、企业组策略锁定、无组策略时用DISM导入XML、注册表精准修改,再讲Windows 11的特殊变化、更新会不会重装回内置应用、不同文件类型的分类应对和设置后立刻被重置的排查。 > 摘要:Windows 10的默认应用关联老被自动重置回内置UWP应用,根子在Modern App的协议校验机制。本文逐层讲清成因,给出四套修复——用PowerShell批量卸载内置UWP、企业组策略锁定、无组策略时用DISM导入XML、注册表精准修改,再讲Windows 11的特殊变化、更新会不会重装回内置应用、不同文件类型的分类应对和设置后立刻被重置的排查。 这件事让我下决心彻底搞清楚——早些年我在公司给同事维护办公电脑时,经常遇到一个让人头疼的现象:明明已经把MP3、MP4、JPG这些文件的默认打开方式 (https://zhangwenbao.com/uninstall-the-wps-after-the-installation-of-the-office2016-icon-does-not-show-the-solution.html)改成了酷狗、PotPlayer或者IrfanView,结果第二天开机一看,全部又变回了Windows 10自带的“Groove音乐”“电影和电视”“照片”三件套。最离谱的一次,我帮一位做平面设计的朋友设了三遍图片关联,到第三天他直接打电话来骂我“你这是修电脑还是搞恶作剧”。 这件事让我下决心把这个问题彻底搞清楚。后来我前后在公司、家用机、客户机上验证了几十次,最终归纳出一套真正有效的方案。本文是我多年踩坑后的整理,目的是让你不用再像我当年那样,每次开机都要重新设置一遍默认应用。 ## 问题的真正成因:第三方软件的关联方式过时了 很多人在搜索这个问题时,看到的回答都是“重启资源管理器”“清除注册表缓存”“重装系统”。这些方法要么治标不治本,要么大动干戈。我自己反复测试后发现,根本原因其实非常具体: 第三方软件(比如老版酷狗、暴风影音、360图片查看器)在安装时调用的文件关联接口,是Windows 7 / 8时代的旧API。而Windows 10引入了新的UWP应用模型,系统会周期性地校验默认关联是否合法。一旦检测到关联指向的不是“现代应用(Modern App)注册表”中登记过的程序,系统就会判定为“无效关联”,从而把它重置回内置的UWP应用。 换句话说:不是你的设置失效了,而是Windows主动把你的设置覆盖掉了。理解了这一点,解决思路就很清晰——既然系统是因为存在内置UWP应用才会去做覆盖,那么把这些占位的内置应用直接卸载掉,系统就没有“目标”可以重置过去了。 ## 底层API变迁:理解关联校验的具体触发点 要不是踩坑实在多,我也不会去翻Windows的相关文档。Windows 10引入的“Windows Modern App Association”机制由SystemSettingsHandlers.dll和shell32.dll共同实现。系统每隔几个小时(Windows 10默认是4小时,Windows 11改成了6小时)会扫描一次HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts下所有扩展名子键,比对其中的UserChoice\ProgId是否在HKEY_CLASSES_ROOT里有合法登记,并且对应程序是否实现了Modern App协议。 关键点是:Modern App协议需要应用在AppXManifest.xml里声明Extension节点。第三方软件如果没在安装包里加这一节,系统就把它当成“Legacy Application”,扫描时一旦发现某扩展名的UserChoice指向Legacy程序,就会把它重置为内置的UWP默认应用。 2018年微软的开发者文档里明确说过,Win32桌面应用如果想稳定持有文件关联,必须发布为Desktop Bridge / MSIX格式,把自己注册到Modern App生态里。但国内大多数老工具(包括暴风影音、老版酷狗、IrfanView早期版本、PotPlayer 1.7之前版本)都没做这件事——这就是它们的关联会反复被重置的根因。 ## 解决方案一:用PowerShell卸载内置UWP应用 这是我目前在自己电脑、客户电脑上都在用的方法,稳定、可逆、不动注册表。 第一步,以管理员身份打开PowerShell。两种方式: - 点击“开始”菜单 → 找到“Windows PowerShell”文件夹 → 右键“Windows PowerShell” → “以管理员身份运行”。 - 或者按Win + X,选择“Windows PowerShell(管理员)”。 注意:必须是管理员权限,普通权限执行会报“拒绝访问”。 第二步,依次执行下面三条命令。每条命令对应一个内置应用: # 卸载 Groove 音乐(内置音乐播放器) Get-AppxPackage *zunemusic* | Remove-AppxPackage # 卸载电影和电视(内置视频播放器) Get-AppxPackage *zunevideo* | Remove-AppxPackage # 卸载照片(内置图片查看器) Get-AppxPackage *photos* | Remove-AppxPackage 执行完没有红色报错就是成功。如果你想顺手把其他不常用的内置应用一起清理,可以参考下面这条更通用的写法: # 查看当前账户安装的所有 UWP 应用 Get-AppxPackage | Select Name, PackageFullName # 卸载指定包名的应用 Get-AppxPackage -Name Microsoft.ZuneMusic | Remove-AppxPackage 卸载完成后,立刻打开“设置 → 应用 → 默认应用”把你想要的第三方软件设置为对应文件类型的默认打开方式。这次设置之后,系统找不到内置UWP应用作为重置目标,所以会一直保持你的选择。 ## 方案一的进阶:批量脚本与多账户处理 如果你管理着公司里几十台电脑,逐个手动操作太累。我自己用一段PowerShell脚本做批量化: # 脚本名:unblock_default_apps.ps1 $apps = @( 'Microsoft.ZuneMusic', 'Microsoft.ZuneVideo', 'Microsoft.Windows.Photos', 'Microsoft.YourPhone', # 手机伴侣 'Microsoft.MicrosoftStickyNotes', # 便利贴 'Microsoft.GetHelp' # 获取帮助 ) foreach ($app in $apps) { $pkg = Get-AppxPackage -AllUsers -Name $app -ErrorAction SilentlyContinue if ($pkg) { Write-Host "Removing $app..." $pkg | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue } else { Write-Host "$app not found, skip" } } Write-Host "Done. Now set your default apps in Settings." 关键点是-AllUsers参数——它把应用从所有账户卸载,而不是只对当前账户。后续新建的本地账户也不会再装回这些应用。这对IT运维场景特别有用。 ## 解决方案二:组策略锁定默认应用(企业级) 对于公司IT环境,更稳的做法是用组策略一次性把整批电脑的默认应用锁死,让用户和系统都不能改。 第一步:在某台“样板机”上设置好所有默认应用,导出当前默认应用配置: Dism /Online /Export-DefaultAppAssociations:C:\AppAssociations.xml 导出的AppAssociations.xml是XML格式,可以手动编辑修改。比如把.mp3关联到KuGouPlayer.MusicFile,把.jpg关联到IrfanView.JPGFile。 第二步:通过组策略推送到所有客户端。打开gpedit.msc,导航到: 计算机配置 → 管理模板 → Windows组件 → 文件资源管理器 → 设置默认关联配置文件 启用此策略,路径填上C:\AppAssociations.xml(或网络共享路径\\server\share\AppAssociations.xml)。 第三步:客户端在下次组策略刷新(或gpupdate /force)后,会从XML导入默认关联,并且用户在“设置”里手动改也会被组策略反复覆盖回来。这是企业批量部署的标准做法。 ## 解决方案三:DISM导入XML(无组策略环境) 家用机或没有域环境的小公司,没有组策略可用,但可以单机用DISM命令直接导入XML: # 导入默认关联(需要管理员) Dism /Online /Import-DefaultAppAssociations:C:\AppAssociations.xml 这个命令的效果跟组策略类似,但只对“新登录的用户”生效——已经登录过的账户不会被覆盖。所以正确用法是:在用户首次登录电脑前用Dism /Online /Import-DefaultAppAssociations设置好默认关联,之后所有新账户的默认应用都按这套配置走。 ## 方案四:注册表精准修改(高级用户) 如果上面方案都不适用,可以直接改注册表。文件关联在注册表里的位置是: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.扩展名\UserChoice 里面有两个关键键值:ProgId(指向具体的程序ID)和Hash(一个由扩展名、ProgId、用户SID、时间戳哈希出来的校验值)。 问题在于Hash值是Windows防止用户绕过UI的校验机制——你直接改ProgId而不更新Hash,系统会判定为非法修改并立刻重置。所以单独改注册表是行不通的,必须配合一个能正确生成Hash的工具。 开源工具SetUserFTA(GitHub上能搜到)就是为这个场景设计的,它内部实现了微软未公开的Hash生成算法。命令示例: SetUserFTA.exe .mp3 KuGou.MusicFile SetUserFTA.exe .jpg IrfanView.JPGFile SetUserFTA.exe .pdf AcroExch.Document.DC 这个工具一次性把ProgId和Hash都正确写入注册表,并且不会触发系统的“关联重置”校验。我自己在Windows 10/11上都验证过,关联设置后能持久不被覆盖。 注意:SetUserFTA需要管理员权限运行,运行后用户立即生效,无需注销。 ## Windows 11的特殊变化 Windows 11在默认应用设置上做了一个让所有人崩溃的改动:默认应用从“按文件类型一键设置”改成了“按程序逐个文件类型设置”。比如你想把所有图片格式都关联到IrfanView,在Windows 10里点一次就行;在Windows 11里需要分别为.jpg、.png、.bmp、.gif、.tiff、.webp等等每个扩展名单独设置一次。 这个改动饱受用户批评,但官方迟迟不改回来。临时解决方法是用前面提到的SetUserFTA批量设置,或者写PowerShell脚本调DISM XML导入。 另外Windows 11在卸载内置应用时增加了一些保护——某些核心应用(如照片、Edge、Microsoft Store)即使Remove-AppxPackage也会报“Failed to remove”错误。这种情况下要加-AllUsers -PackageTypeFilter Bundle, Main参数才能彻底卸载。 ## Windows更新会不会重新装回内置应用 这是被问得最多的问题。结论是:普通Windows月度累积更新不会重装内置应用,但大版本功能更新(比如21H2 → 22H2)会重新拉一次内置应用清单。我跟踪过自己几台电脑的行为,每次大版本更新(一年大约一两次)后,部分被卸载的内置应用会被悄悄装回来。 应对方法是更新完成后立即重跑一次PowerShell卸载脚本。如果你做了组策略锁定,组策略的优先级高于Windows默认配置,重装的内置应用不会改变文件关联——但应用本身还是会重装。 ## 不同文件类型的关联差异:分类型应对 不同文件类型的关联机制略有差异,逐个谈一下我自己实战里见过的特别情况。 ## 音频文件(.mp3 / .flac / .wav / .m4a / .ogg) 这一类是最容易被Groove重置的。除了卸载Groove之外,建议同时关掉“在后台运行”中的Groove伴随服务。如果你用Foobar2000或Aimp这类老派音频播放器,记得在播放器内置的"关联设置"里勾选所有支持的格式——很多人只勾了mp3,结果flac、ape、wv还是被Groove抢走。 ## 视频文件(.mp4 / .mkv / .avi / .mov / .wmv) 视频关联问题主要来自Windows的“电影和电视”UWP和HEVC编解码器扩展。卸载电影和电视后,.mp4、.mkv关联会稳定,但.heic、.heif这两个新格式的关联会被HEVC编解码器扩展反复夺回。要彻底解决这两个格式关联,得卸载HEVC编解码器扩展(Get-AppxPackage *HEIFImageExtension* | Remove-AppxPackage),但卸载后系统就完全不能播放HEVC内容了,需要手动装一个第三方编解码器(K-Lite Codec Pack)。 ## 图片文件(.jpg / .png / .gif / .webp / .bmp) 图片关联是Windows 11改动最大的领域。除了内置“照片”UWP,还有一个新的“Photos Legacy”UWP(兼容旧版照片查看器),两个都要卸载才能彻底关联到IrfanView或Honeyview。.webp因为是Google提出的新格式,Windows原生支持有限,第三方工具反而经常关联得更稳。 ## 文档文件(.pdf / .txt / .docx / .xlsx) PDF的默认关联在Windows 10/11里特别顽固,因为系统会强行让Edge浏览器接管。即使你装了Adobe Acrobat (https://zhangwenbao.com/acrobat-does-not-allow-connections-to.html)或Foxit Reader,每次大版本更新都会被Edge夺回。最稳的解决方案是组策略锁定.pdf关联,或者用SetUserFTA直接写注册表绕过UI。 ## 常见的“关联设置后立刻被重置”场景排查 我维护过的客户里,有几种特殊场景关联会被立刻重置(不是定时重置,是设置完几秒就没了)。归纳几条排查方向: 场景一:装了第三方"系统优化"软件。360安全卫士、腾讯电脑管家、火绒、QQ管家这些工具的某些版本里有“文件关联保护”功能,会强行把关联绑回它们指定的程序。卸载这类软件或在它们的设置里关闭“文件关联保护”即可。 场景二:杀毒软件锁了HKCU\...\FileExts。某些杀毒软件(赛门铁克、卡巴斯基的企业版)在加固模式下会锁定注册表的UserChoice键。要在杀软设置里把对应路径加白名单。 场景三:装了远程管理软件(如Anydesk、向日葵)的同时IT部门做了集中策略。有些公司的IT会用脚本定时重置员工的默认应用以确保用统一的内部工具,这种情况下个人改是改不动的,需要找IT沟通。 场景四:用了“Storage Sense”和"PC Reset"类工具的恢复点。Windows的存储感知或第三方系统还原工具如果触发了"恢复出厂"操作,会把所有自定义关联清掉。这种是大动作,一般不会无意触发。 ## 常见问题解答 ## 卸载内置UWP应用会影响系统稳定性吗? 不会。Groove音乐、电影和电视、照片这三个内置应用是独立的UWP应用,不是Windows的核心组件。卸载它们对系统功能没有任何影响——就跟你卸掉一个普通软件一样安全。但要注意:不要去卸载Microsoft Store本身、Cortana、SearchUI、ShellExperienceHost这些核心UWP,这些被卸载会导致系统功能异常。 ## 卸载之后还想装回来怎么办? 有两种方法。第一种:打开Microsoft Store搜应用名(Groove Music、Movies & TV、Photos)重新安装,几分钟搞定。第二种:用PowerShell的Get-AppxPackage -AllUsers Microsoft.ZuneMusic | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}从原始安装包重新注册,前提是没有彻底删除安装文件。 ## SetUserFTA工具安全吗?会不会触发杀毒软件警报? SetUserFTA本身是开源工具,源码在GitHub可查。但因为它实现的是“微软未公开的Hash算法”,部分杀毒软件(特别是火绒、360)会把它误报为"修改系统关键设置"的可疑行为。如果你信任源码,把SetUserFTA加到杀毒软件白名单即可。如果不放心,组策略+DISM XML的方案完全不需要这个工具。 ## 组策略推送的XML可以更新吗?还是只能一次性设置? 可以更新但更新对已经登录过的账户无效。组策略的Set Default Associations Configuration File策略只在用户“首次登录”时应用XML,之后用户改了关联就改了,新版本XML不会再覆盖。如果你需要批量改已登录账户的关联,必须配合PowerShell脚本(用SetUserFTA或者在登录脚本里删除UserChoice键再重设)。 ## 能不能不卸载UWP应用,只让系统不要重置? 有一种间接方法:把内置UWP应用设置为“禁用”(不让它启动)。在“设置 → 应用 → 应用和功能”里找到Groove音乐,点“高级选项 → 终止”并关闭"在后台运行"。但这种方法对“关联重置”机制不起作用——系统重置关联的判断是基于注册表登记,不是基于应用是否运行。所以最有效的做法还是卸载。 ## Windows家庭版没有gpedit.msc怎么办? 家庭版默认不带组策略编辑器,但可以用第三方工具Policy Plus(开源)或者通过DISM安装gpedit。最简单的解决方案是直接用DISM命令Dism /Online /Import-DefaultAppAssociations,这个命令在所有Windows版本上都可用,不依赖组策略编辑器。 ## 关联还原成默认值后能批量恢复成上次的设置吗? 能,前提是事前导出过。事前用Dism /Online /Export-DefaultAppAssociations:backup.xml把当前关联导出,事后Dism /Online /Import-DefaultAppAssociations:backup.xml导入即可。建议每次系统大版本更新前都做一次导出备份,更新完用Import恢复。这套流程能避免每次大更新后的重新设置麻烦。 ## 新装的Windows系统怎么从一开始就部署好关联? 用“应答文件”(unattend.xml)在系统部署阶段就把默认关联预置好。这是企业批量部署的最佳实践——通过Windows ADK制作的应答文件可以在系统首次启动时自动导入AppAssociations.xml,用户首次登录就拿到一套预设好的关联,不需要后续再调。家用场景虽然用不到这种自动化,但理解这个机制能让你明白为什么企业IT能让几千台电脑保持完全一致的默认应用配置。 ## Windows一键切换静态/动态IP:从.bat到PowerShell+Wi-Fi SSID联动的现代化方案 - URL:https://zhangwenbao.com/automatically-set-ip-addresses-for-wireless-networks-and-ethernet.html - 分类:Windows系统 - 发布:2017-01-08 | 更新:2026-06-02 - 摘要:Windows笔记本在办公室静态IP和家庭DHCP之间来回切换,老.bat脚本硬编码网卡名根本不通用。本文给出PowerShell方案:自动检测活跃网卡、参数化多套配置、UAC提权、按Wi-Fi SSID自动联动切换,附netsh命令速查和切换后的验证步骤。 - 关键词:PowerShell,Linux > **TLDR**:摘要:Windows笔记本在办公室静态IP和家庭DHCP之间来回切,老.bat脚本硬编码网卡名根本不通用。本文给出现代化的PowerShell方案:自动检测活跃网卡、UAC提权、参数化多套配置档、按Wi-Fi的SSID变化自动联动切换,再附netsh所有可用变体的速查、一键添加多网卡多协议、切换后的回环测试与验证、常见错误码排查,以及Mac和Linux的等价做法。 > 摘要:Windows笔记本在办公室静态IP和家庭DHCP之间来回切,老.bat脚本硬编码网卡名根本不通用。本文给出现代化的PowerShell方案:自动检测活跃网卡、UAC提权、参数化多套配置档、按Wi-Fi的SSID变化自动联动切换,再附netsh所有可用变体的速查、一键添加多网卡多协议、切换后的回环测试与验证、常见错误码排查,以及Mac和Linux的等价做法。 笔记本电脑在家用 DHCP 自动获取 IP、到公司又得改成静态固定 IP 才能上内网——切换两个网络环境时手动改 IP/掩码/网关/DNS 6 项设置实在烦。一个 .bat 批处理文件 + 双击就能切换是经典解法,但网传的批处理在 2026 年要更新——Windows 10/11 的网卡名字本地化、UAC 权限、PowerShell 替代 netsh、多网卡同时切、Wi-Fi SSID 关联自动切换等都变了。 这一篇把"Windows 一键切换 IP"从 .bat 时代讲到 PowerShell + 计划任务 + Wi-Fi SSID 自动联动的现代化做法,附 netsh / Powershell / WMI 三套实现对比、UAC 与 ExecutionPolicy 真实坑、多接口同步切换、配置档(profile)模式与 FAQ。 ## 原始 .bat 代码的三个真实坑 原帖代码逻辑没问题,但实战遇到的坑: ## 网卡名"以太网"在不同语言 / 版本不同 系统 | 有线网卡默认名 | Wi-Fi 默认名 | Win 7 / 8 中文版 | 本地连接 | 无线网络连接 | Win 10 中文版 | 以太网 | WLAN | Win 11 中文版 | 以太网 | Wi-Fi | Win 10/11 英文版 | Ethernet | Wi-Fi | 装了多块网卡 | 以太网 / 以太网 2 / 以太网 3 | 同样可能多个 | 脚本里写死 name="以太网" 在英文系统、装了多块网卡、用户改过名字的电脑上都不工作。 ## UAC 权限不够会无声失败 netsh 改 IP 需要管理员权限。普通双击运行 .bat 默认走非管理员,netsh 命令不报错但不生效——脚本看似跑完,IP 实际没变。 ## 多 DNS / IPv6 没考虑 原代码只设主备 DNS、只针对 IPv4。2026 年很多公司开始走 IPv4+IPv6 双栈,IPv6 没切换会导致部分应用走错路由。 ## 现代化版本:PowerShell + 自动检测网卡 PowerShell 比 netsh 更现代,且支持自动检测当前活跃网卡,不依赖固定中文名: #Requires -RunAsAdministrator # switch-ip.ps1 — 一键切换办公/家庭网络配置 param( [Parameter(Mandatory=$true)] [ValidateSet('office','home','custom')] [string]$Mode ) # 自动找到当前已连接的有线/Wi-Fi 接口 $activeInterface = Get-NetAdapter | Where-Object { $_.Status -eq 'Up' -and $_.MediaType -in 'Ethernet 802.3', 'Native 802.11' } | Select-Object -First 1 if (-not $activeInterface) { Write-Host '[ERR] 没找到活跃的网络适配器' -ForegroundColor Red exit 1 } $ifName = $activeInterface.Name Write-Host "活跃网卡: $ifName ($($activeInterface.InterfaceDescription))" switch ($Mode) { 'office' { Write-Host '[INFO] 切换到办公网络(静态 IP)' # 移除已有 IP 配置 Get-NetIPAddress -InterfaceAlias $ifName -AddressFamily IPv4 -ErrorAction SilentlyContinue | Remove-NetIPAddress -Confirm:$false Get-NetRoute -InterfaceAlias $ifName -AddressFamily IPv4 -ErrorAction SilentlyContinue | Where-Object DestinationPrefix -eq '0.0.0.0/0' | Remove-NetRoute -Confirm:$false # 设置静态 IP New-NetIPAddress -InterfaceAlias $ifName -IPAddress '10.129.34.147' -PrefixLength 22 -DefaultGateway '10.129.32.1' Set-DnsClientServerAddress -InterfaceAlias $ifName -ServerAddresses ('10.129.32.10','114.114.114.114') Write-Host '[OK] 办公网络配置完成' } 'home' { Write-Host '[INFO] 切换到家庭网络(DHCP)' # 改回 DHCP Set-NetIPInterface -InterfaceAlias $ifName -Dhcp Enabled Set-DnsClientServerAddress -InterfaceAlias $ifName -ResetServerAddresses # 强制重新拉 IP ipconfig /release $ifName | Out-Null ipconfig /renew $ifName | Out-Null Write-Host '[OK] DHCP 已恢复' } 'custom' { $ip = Read-Host '输入 IP 地址' $prefix = Read-Host '输入子网掩码长度(如 24)' $gw = Read-Host '输入网关' $dns = Read-Host '输入 DNS(逗号分隔)' Get-NetIPAddress -InterfaceAlias $ifName -AddressFamily IPv4 -ErrorAction SilentlyContinue | Remove-NetIPAddress -Confirm:$false New-NetIPAddress -InterfaceAlias $ifName -IPAddress $ip -PrefixLength $prefix -DefaultGateway $gw Set-DnsClientServerAddress -InterfaceAlias $ifName -ServerAddresses ($dns -split ',') Write-Host '[OK] 自定义网络配置完成' } } # 显示当前配置确认 Write-Host "`n当前 IP 配置:" Get-NetIPAddress -InterfaceAlias $ifName -AddressFamily IPv4 | Format-Table InterfaceAlias, IPAddress, PrefixLength, AddressOrigin ## 用法 PS> .\switch-ip.ps1 -Mode office PS> .\switch-ip.ps1 -Mode home PS> .\switch-ip.ps1 -Mode custom 命令行参数化比 .bat 的菜单选择更适合自动化(计划任务、双击不同快捷方式等)。 ## PowerShell 优势 - 自动检测活跃网卡:Get-NetAdapter + Status='Up' 不依赖网卡名; - 无视语言版本:英文系统、中文系统、日文系统都能跑; - 错误处理:原生 try/catch,失败有明确提示; - 对象式输出:可以管道继续处理,不像 netsh 输出纯文本; - 支持 IPv6:Set-NetIPAddress 等 cmdlet 全部支持 -AddressFamily IPv6。 ## UAC 与执行策略的处理 ## 双击 .ps1 默认不会跑 Windows 默认执行策略是 Restricted——双击 .ps1 文件什么也不发生。要让它能跑,必须改: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 或者每次用 -ExecutionPolicy Bypass 临时绕过: powershell -ExecutionPolicy Bypass -File C:\scripts\switch-ip.ps1 -Mode office ## 自动以管理员身份运行 .ps1 顶部加 #Requires -RunAsAdministrator 让脚本检测权限不够时报错——但仍不会自动提权。要"双击就以管理员跑"必须用一个调用脚本: REM switch-ip.bat(双击它) @echo off powershell -Command "Start-Process powershell -ArgumentList '-NoExit -ExecutionPolicy Bypass -File C:\scripts\switch-ip.ps1 -Mode office' -Verb RunAs" 这段 .bat 用 Start-Process -Verb RunAs 触发 UAC 弹窗,用户点"是"后以管理员跑实际逻辑。比直接 .bat 体验稍差(多一次 UAC 弹窗),但比手动改 ExecutionPolicy 全局更安全。 ## Wi-Fi SSID 自动联动切换 真正一劳永逸的方案:连接 Wi-Fi 时自动判断是公司网还是家网,自动切换 IP 配置。 ## 用 NetEventSession 监听网络变化 # 监听 Wi-Fi 接口的连接事件 $action = { $ssid = (netsh wlan show interfaces | Select-String 'SSID\s*:\s*(.+)$').Matches[0].Groups[1].Value.Trim() if ($ssid -eq 'CompanyWiFi') { & C:\scripts\switch-ip.ps1 -Mode office } elseif ($ssid -eq 'HomeWiFi') { & C:\scripts\switch-ip.ps1 -Mode home } } Register-WmiEvent -Class Win32_NetworkAdapterConfiguration -Action $action 这段在 PowerShell 后台跑,每次网络变化触发回调判断 SSID 自动切配置。 ## 用 Windows Task Scheduler 触发 更稳的做法是用计划任务监听 EventLog 里的网络连接事件: # 创建计划任务 $Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -WindowStyle Hidden -File C:\scripts\auto-switch-ip.ps1" $Trigger = New-ScheduledTaskTrigger -AtLogon # 用户登录时 # 也可以用 EventLog 触发器 $EventTrigger = New-ScheduledTaskTrigger -AtStartup $Settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -DontStopOnIdleEnd Register-ScheduledTask -TaskName "AutoSwitchIP" -Action $Action -Trigger $EventTrigger -Settings $Settings -RunLevel Highest ## netsh 命令的所有可用变体 原帖只展示了 netsh interface ip set address 一种。netsh 还有更多有用的命令: REM 查看所有接口的 IP 配置 netsh interface ip show config REM 设置静态 IP(含网关 metric) netsh interface ip set address name="以太网" source=static addr=10.0.0.5 mask=255.255.255.0 gateway=10.0.0.1 gwmetric=1 REM 改成 DHCP netsh interface ip set address name="以太网" source=dhcp REM 添加额外 IP(同一接口多 IP) netsh interface ip add address name="以太网" addr=10.0.0.6 mask=255.255.255.0 REM 设置 DNS(覆盖所有) netsh interface ip set dns name="以太网" source=static addr=8.8.8.8 REM 添加额外 DNS netsh interface ip add dns name="以太网" addr=1.1.1.1 index=2 REM DHCP 模式 DNS netsh interface ip set dns name="以太网" source=dhcp REM 重启接口(强制重连) netsh interface set interface "以太网" disable netsh interface set interface "以太网" enable REM IPv6 设置 netsh interface ipv6 set address interface="以太网" 2001:db8::1/64 REM 备份当前配置 netsh interface ip dump > C:\backup\ip-config.txt REM 还原配置 netsh -f C:\backup\ip-config.txt 最后一条 netsh -f 还原是救命操作——脚本改坏配置导致没网时,从备份还原比手工敲快得多。建议每次改 IP 前先 dump 一份备份。 ## 一键添加多个网卡 / 多协议 有些办公环境要同时配 IPv4 + IPv6 + 走 VPN,原帖单接口脚本不够。多接口同步处理: function Set-OfficeNetwork { $configs = @( @{ Iface='以太网'; IP='10.0.0.5'; Prefix=24; Gw='10.0.0.1'; DNS=@('8.8.8.8','1.1.1.1') }, @{ Iface='Wi-Fi'; IP='192.168.1.123'; Prefix=24; Gw='192.168.1.1'; DNS=@('8.8.8.8','1.1.1.1') }, @{ Iface='以太网 2'; IP='172.16.0.5'; Prefix=16; Gw='172.16.0.1'; DNS=@('8.8.8.8') } ) foreach ($cfg in $configs) { try { Get-NetIPAddress -InterfaceAlias $cfg.Iface -AddressFamily IPv4 -ErrorAction Stop | Remove-NetIPAddress -Confirm:$false New-NetIPAddress -InterfaceAlias $cfg.Iface -IPAddress $cfg.IP -PrefixLength $cfg.Prefix -DefaultGateway $cfg.Gw -ErrorAction Stop Set-DnsClientServerAddress -InterfaceAlias $cfg.Iface -ServerAddresses $cfg.DNS -ErrorAction Stop Write-Host "[OK] $($cfg.Iface)" } catch { Write-Host "[FAIL] $($cfg.Iface): $_" -ForegroundColor Red } } } ## 网络配置档(Profile)模式 Windows 10/11 自带"网络配置档"概念——每个 Wi-Fi SSID 是一个 profile,profile 里能记录 IP 静态/动态等。但 GUI 里只能给 Wi-Fi 用,不能给以太网。要给以太网用 profile: REM 导出当前以太网配置为 XML netsh interface portproxy dump > office-eth.xml REM 导入应用 netsh interface portproxy reset netsh -f office-eth.xml ## 回环测试与验证 切换完后立刻验证: # 验证 IP 已切换 Get-NetIPAddress -AddressFamily IPv4 | Where-Object IPAddress -Like '10.*' # 测试网关连通 Test-Connection 10.129.32.1 -Count 2 # 测试 DNS 解析 Resolve-DnsName www.baidu.com # 测试到外网 Test-Connection 1.1.1.1 -Count 2 四步全过才算切换成功。任何一步失败都可能是配置错或物理链路问题。 ## 常见错误代码与排查 错误 | 原因 | 解决 | "系统找不到指定的文件" | 网卡名错 | Get-NetAdapter 列出实际名称 | "对象已存在" | 之前的 IP 没清 | 先 Remove-NetIPAddress 再 New-NetIPAddress | 设置成功但 ipconfig 显示空 | UAC 权限不够 | 以管理员身份运行 | 切换后无网 | 网关错或子网掩码错 | 核对配置;用 netsh -f 恢复备份 | "指定的接口处于禁用状态" | 网卡禁用了 | Enable-NetAdapter 启用 | ## Mac / Linux 等价做法 这套思路在其它系统的等价: - macOS:用 networksetup -setmanual "Ethernet" 10.0.0.5 255.255.255.0 10.0.0.1 切换;用"Locations"功能保存多套配置一键切。 - Linux:ip addr add + ip route add,或用 NetworkManager 的 nmcli connection modify。 - iOS / iPadOS:设置 → Wi-Fi → 已连接的网络 → 配置 IP,无脚本能力,只能手动。 - Android:开发者选项里的网络配置,部分 ROM 支持基于 SSID 的自动配置。 ## 常见问题解答 ## 双击 .bat 后弹窗一闪而过看不清错误? 在 .bat 末尾加 pause 让窗口停留,或在每条命令后加 echo %ERRORLEVEL% 看返回码。也可以用 cmd /k 启动窗口:cmd /k C:\path\switch-ip.bat 命令跑完不关闭。 ## UAC 弹窗每次都问"是否允许",能记住吗? 不能。UAC 是 Windows 安全机制,每次提权都弹窗是设计行为。如果嫌烦:① 改用计划任务,设"以最高权限运行",触发器跑 .ps1,调用方就不需要 UAC;② 关闭 UAC(不推荐,全局降低安全)。最佳实践是接受这次弹窗。 ## 切换后浏览器还显示"无网络"? 浏览器有自己的网络状态缓存。① 关闭重开浏览器;② 或在地址栏 chrome://net-internals/#dns 清 DNS 缓存;③ 命令行 ipconfig /flushdns。最稳的做法是切换脚本最后加这两个命令。 ## Wi-Fi 切换 SSID 时怎么自动跑脚本? 用文中第四节的 NetEventSession 或 EventLog 触发器。Windows 11 还有更新的 SystemEventsBroker,能更精确监听 Wi-Fi SSID 变化事件。完整方案推荐用 PowerShell 写一个长驻服务(Register-ScheduledTask + AtLogon 触发器)。 ## 切换后还想恢复原来的 DNS 设置怎么办? 切换前先 dump:netsh -c interface dump > C:\backup\original.txt。要恢复 netsh -f C:\backup\original.txt。这是 netsh 自带的备份/还原机制,比记下每条命令再手动跑可靠。 ## 切换 IP 时 VPN 连接会断吗? 看 VPN 走哪个接口。① 如果 VPN 走的是物理网卡,切物理网卡 IP 时 VPN 会断;② 如果 VPN 用虚拟网卡(如 OpenVPN TAP),切物理网卡不影响 VPN。脚本里如果要稳,可以先 rasdial /disconnect 断 VPN → 切 IP → 重连 VPN。 ## 能给不同的 USB 网卡设不同 IP 吗? 能。Get-NetAdapter 会列出所有网卡(包括 USB 转网口),按 InterfaceDescription 或 InterfaceAlias 区分写脚本即可。USB 网卡的命名通常是 "USB Ethernet" 或 "Realtek USB FE Family Controller" 之类。 ## 脚本权限不够能用任务计划绕过 UAC 吗? 能。创建任务计划时勾"以最高权限运行" + "用户登录时触发"。这样脚本直接以管理员身份跑,调用方不需要 UAC。但首次创建任务计划本身需要管理员权限。 ## 多用户共享电脑,每个用户配置不同怎么办? 把脚本放到每个用户的 %USERPROFILE%\AppData\Local\ 下,每个用户有自己的版本。或者在脚本里读取 $env:USERNAME 切换不同配置。共享部分(如管理员权限要求)放到公共位置 C:\ProgramData\。 ## 能不能用 Group Policy(组策略)替代脚本? 能。企业域环境下,AD 域 Group Policy 可以下发"基于位置的网络配置"。家庭/小公司没 AD 域,脚本是最实用方案。Group Policy 的优点是集中管理 + 强制;缺点是要 AD 环境且配置复杂。 ## Windows与服务器运维相关阅读 同主题集群覆盖IIS (https://zhangwenbao.com/the-iis-website-opens-to-indicate-that-you-have-no-right-to-use-the-credentials-provided-to-view-the-solution-to-this-directory.html)、URL Rewrite、Linux权限等运维基础: - IIS10装不上URL Rewrite2.0 (https://zhangwenbao.com/the-url-rewrite-tool-cannot-be-installed-on-the-iis100-web-platform-installation-tool.html)——3套实战修复方案 - IIS强制HTTPS跳转 (https://zhangwenbao.com/iis7-set-http-to-https-redirect.html)——URL Rewrite5套实战 - Linux权限完全实战 (https://zhangwenbao.com/linux-server-sets-files-folders-read-write-permissions.html)——chmod/chown/ACL/SELinux5组合