<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>小鼠宝の鼠窝</title><description>一只爱打洲的鼠</description><link>https://www.cpdd520.top/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.15.6</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年8月14日 13:08:45</lastBuildDate><item><title>阳光大坝改枪码</title><link>https://www.cpdd520.top/posts/sunshine-dam-gun-codes/</link><guid isPermaLink="true">https://www.cpdd520.top/posts/sunshine-dam-gun-codes/</guid><description>三角洲行动阳光大坝玩法常用改枪码汇总，包含 RM277、SKS、M249、AUG、QJB201 等多套枪械配置。</description><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;RM277 突击步枪&lt;a href=&quot;#rm277-突击步枪&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;配置&lt;/th&gt;&lt;th&gt;改枪码&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;最便宜&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KS3SH40A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;半改操控二倍&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KS3SIG0A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;半改性价比二倍&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KR9JVC0A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;半改操控hama&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KS3SNS0A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;满改&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KS40TC0A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;SKS 射手步枪&lt;a href=&quot;#sks-射手步枪&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;












&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;配置&lt;/th&gt;&lt;th&gt;改枪码&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;33万极简&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KS3SUO0A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;M249 轻机枪&lt;a href=&quot;#m249-轻机枪&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;












&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;配置&lt;/th&gt;&lt;th&gt;改枪码&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;多倍率满改&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KS3TFG0A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;AUG 突击步枪&lt;a href=&quot;#aug-突击步枪&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;












&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;配置&lt;/th&gt;&lt;th&gt;改枪码&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;AUG&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KS3VN80A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;QJB201 轻机枪&lt;a href=&quot;#qjb201-轻机枪&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;不到30万QJB201，稳固更好压，多口径不带稳固ttk比稳固短。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;落地用30发弹匣，开镜快。&lt;/li&gt;
&lt;li&gt;开蹲后趴下开脚架，拆掉弹匣解锁125发。&lt;/li&gt;
&lt;li&gt;可以自定义加装贴片和激光。&lt;/li&gt;
&lt;/ul&gt;
















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;配置&lt;/th&gt;&lt;th&gt;改枪码&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;稳固&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KTJO4O0A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;多口径&lt;/td&gt;&lt;td&gt;&lt;code&gt;6KTJO5C0A36EC98AEOAHV&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;</content:encoded></item><item><title>静态博客一键发布到服务器：WinSCP + SFTP 实战指南</title><link>https://www.cpdd520.top/posts/winscp-sftp-deploy/</link><guid isPermaLink="true">https://www.cpdd520.top/posts/winscp-sftp-deploy/</guid><description>使用 WinSCP 命令行版通过 SFTP 协议将 Astro 等静态博客一键同步到 Linux 服务器，含单步同步脚本和构建+同步一键脚本，附方向搞反、.user.ini 权限、中文乱码等避坑指南。</description><pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;概述&lt;a href=&quot;#概述&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;对于使用 Astro、Hugo、Hexo 等静态博客框架的用户，在本地 &lt;code&gt;pnpm build&lt;/code&gt; 后需要把 &lt;code&gt;dist&lt;/code&gt; 目录上传到服务器。相比手动用 FTP/宝塔面板拖拽，&lt;strong&gt;WinSCP 命令行版&lt;/strong&gt;的优势在于：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;✅ 增量同步：只传有变化的文件&lt;/li&gt;
&lt;li&gt;✅ 哈希校验：&lt;code&gt;-criteria=checksum&lt;/code&gt; 确保文件传输完整&lt;/li&gt;
&lt;li&gt;✅ 镜像模式：&lt;code&gt;-delete&lt;/code&gt; 自动删除服务器多余文件&lt;/li&gt;
&lt;li&gt;✅ 纯命令行：可以封装成 &lt;code&gt;.ps1&lt;/code&gt; 脚本一键执行&lt;/li&gt;
&lt;li&gt;✅ 兼容宝塔：Windows 用户最熟悉的 GUI + 命令行双模式工具&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;本文给出完整的 WinSCP + SFTP 部署流程，包含两套脚本（单步同步、构建+同步一键）和所有避坑点。&lt;/p&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;一、安装 WinSCP（命令行版）&lt;a href=&quot;#一安装-winscp命令行版&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;WinSCP 安装包同时包含 GUI 和 命令行（&lt;code&gt;WinSCP.com&lt;/code&gt;），我们只需要两个文件：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;去 &lt;a href=&quot;https://winscp.net/eng/download.php&quot; target=&quot;_blank&quot;&gt;WinSCP 官网下载页&lt;/a&gt; 下载「Portable executables」便携版&lt;/li&gt;
&lt;li&gt;解压后将以下 3 个文件放到博客项目的 &lt;code&gt;tools/&lt;/code&gt; 目录下：&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;your-blog/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── tools/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── WinSCP.com       ← 命令行主程序（我们用这个）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── WinSCP.exe       ← GUI 版本（依赖，必须一起放）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── WinSCP.chs       ← 简体中文语言包（可选，放了命令行会输出中文）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;💡 不用配环境变量，脚本里用 &lt;code&gt;$PSScriptRoot&lt;/code&gt; 取同目录路径，直接相对位置调用即可。&lt;/p&gt;&lt;/blockquote&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;二、同步方向（最容易踩坑的点）&lt;a href=&quot;#二同步方向最容易踩坑的点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;WinSCP &lt;code&gt;synchronize&lt;/code&gt; 命令的方向参数有两个，&lt;strong&gt;写反会被覆盖&lt;/strong&gt;：&lt;/p&gt;



















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;命令&lt;/th&gt;&lt;th&gt;方向&lt;/th&gt;&lt;th&gt;含义&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;synchronize local&lt;/code&gt;&lt;/td&gt;&lt;td&gt;远程 → 本地&lt;/td&gt;&lt;td&gt;&lt;strong&gt;用服务器的文件覆盖本地&lt;/strong&gt; ❌（删除本地多余文件）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;synchronize remote&lt;/code&gt;&lt;/td&gt;&lt;td&gt;本地 → 远程&lt;/td&gt;&lt;td&gt;&lt;strong&gt;用本地 dist 覆盖服务器&lt;/strong&gt; ✅（删除服务器多余文件）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;写博客部署用的一定是 &lt;strong&gt;&lt;code&gt;synchronize remote&lt;/code&gt;&lt;/strong&gt;。如果不小心写成 &lt;code&gt;local&lt;/code&gt;，服务器上旧版本的文件会把你刚构建好的新 dist 覆盖回来。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;快速验证方法&lt;/strong&gt;：加 &lt;code&gt;-preview&lt;/code&gt; 参数只预览不执行，看输出里是「新建本地文件」还是「新建远程文件」：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 预览命令，不会实际执行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;synchronize remote &quot;本地路径&quot; &quot;远程路径&quot; -preview&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;三、单步同步脚本（只做同步）&lt;a href=&quot;#三单步同步脚本只做同步&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;适合场景：已经 &lt;code&gt;pnpm build&lt;/code&gt; 完，只想把 dist 推上去。&lt;/p&gt;&lt;p&gt;在 &lt;code&gt;tools/&lt;/code&gt; 下新建 &lt;code&gt;同步到服务器.ps1&lt;/code&gt;：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SYNOPSIS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;静态博客 dist 一键同步到服务器&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;DESCRIPTION&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WinSCP SFTP 增量同步：上传新增/修改文件 + 删除服务器多余文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ========== 配置区（改成你自己的信息） ==========&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$winscpPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Join-Path&lt;/span&gt;&lt;span&gt; $PSScriptRoot &lt;/span&gt;&lt;span&gt;&quot;WinSCP.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$localDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;D:\your-blog\dist\&quot;&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;# 改：本地 dist 路径&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$remoteDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;/www/wwwroot/blog&quot;&lt;/span&gt;&lt;span&gt;              &lt;/span&gt;&lt;span&gt;# 改：服务器站点目录&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$sshHost&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;你的服务器IP&quot;&lt;/span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;span&gt;# 改：例如 123.45.67.89&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$port&lt;/span&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;22&lt;/span&gt;&lt;span&gt;                                &lt;/span&gt;&lt;span&gt;# SSH 端口，一般默认 22&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$user&lt;/span&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;root&quot;&lt;/span&gt;&lt;span&gt;                            &lt;/span&gt;&lt;span&gt;# 改：SSH 用户名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$pass&lt;/span&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;你的SSH密码&quot;&lt;/span&gt;&lt;span&gt;                      &lt;/span&gt;&lt;span&gt;# 改：SSH 密码&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$logFile&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Join-Path&lt;/span&gt;&lt;span&gt; $PSScriptRoot &lt;/span&gt;&lt;span&gt;&quot;sync-log.txt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ========== 前置检查 ==========&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;-not&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Test-Path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$winscpPath&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[错误] 未找到 WinSCP.com，请放在 tools\ 目录下。&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Red&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pause&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ========== 核心同步命令 ==========&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 参数说明：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   -hostkey=*                 跳过主机指纹确认（首次连接不卡手动确认）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   synchronize remote         本地 -&amp;gt; 服务器&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   -delete                    删除服务器多余文件（镜像模式）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   -criteria=checksum         用哈希判断文件是否变化（比时间戳准）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#   -filemask=&quot;|.user.ini;**/.user.ini&quot;   排除所有目录下的 .user.ini&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#       |.user.ini = 排除根目录 .user.ini&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#       **/.user.ini = 排除所有子目录 .user.ini（宝塔面板会生成）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$scriptText&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;open sftp://&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;sshHost&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;port&lt;/span&gt;&lt;span&gt; -hostkey=*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;synchronize remote &quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;localDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot; &quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;remoteDir&lt;/span&gt;&lt;span&gt;&quot; -delete -criteria=checksum -filemask=&quot;|.user.ini;**/.user.ini&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;exit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;@&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmpScript&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Join-Path&lt;/span&gt;&lt;span&gt; $PSScriptRoot &lt;/span&gt;&lt;span&gt;&quot;winscp_tmp.txt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.IO.File&lt;/span&gt;&lt;span&gt;]::WriteAllText(&lt;/span&gt;&lt;span&gt;$tmpScript&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$scriptText&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.Text.Encoding&lt;/span&gt;&lt;span&gt;]::ASCII)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[信息] 开始同步...&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Cyan&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;amp; &lt;/span&gt;&lt;span&gt;$winscpPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmpScript&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logFile&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Remove-Item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$tmpScript&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ErrorAction SilentlyContinue&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;[完成] 同步完毕，日志：&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logFile&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Green&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pause&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;保存注意&lt;/strong&gt;：PowerShell 脚本里有中文时，&lt;strong&gt;必须用「UTF-8 with BOM」编码&lt;/strong&gt;保存（用 VSCode 右下角选「带 BOM 的 UTF-8」即可），否则会出现「锟斤拷」乱码导致脚本解析失败。&lt;/p&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;四、构建 + 同步 一键脚本&lt;a href=&quot;#四构建--同步-一键脚本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;适合场景：写完文章后一条命令发布到底。&lt;/p&gt;&lt;p&gt;在 &lt;code&gt;tools/&lt;/code&gt; 下新建 &lt;code&gt;构建并同步.ps1&lt;/code&gt;：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;#&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SYNOPSIS&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;一键：pnpm build -&amp;gt; WinSCP SFTP 同步&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;构建失败则不会执行同步，避免把空 dist 推到服务器&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;#&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ========== 路径 ==========&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$projectRoot&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Split-Path&lt;/span&gt;&lt;span&gt;&lt;span&gt; $PSScriptRoot &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Parent   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# 项目根目录（tools 上一级）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$distDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Join-Path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$projectRoot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;dist&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$winscpPath&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Join-Path&lt;/span&gt;&lt;span&gt; $PSScriptRoot &lt;/span&gt;&lt;span&gt;&quot;WinSCP.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$logFile&lt;/span&gt;&lt;span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Join-Path&lt;/span&gt;&lt;span&gt; $PSScriptRoot &lt;/span&gt;&lt;span&gt;&quot;sync-log.txt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ========== 服务器连接配置（改成你自己的） ==========&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$sshHost&lt;/span&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;你的服务器IP&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$port&lt;/span&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;22&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$user&lt;/span&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;root&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$pass&lt;/span&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;你的SSH密码&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$remoteDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ========== 环境检查 ==========&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$pnpmVer&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &amp;amp; pnpm &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;version 2&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;$null&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;-not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$pnpmVer&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;pnpm not found&quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;[OK] pnpm v&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;pnpmVer&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Gray&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[错误] 未检测到 pnpm，请先安装：npm install -g pnpm&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Red&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pause&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ========== Step 1：构建 ==========&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[1/2] 开始构建：pnpm build&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Cyan&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$buildTimer&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Diagnostics.Stopwatch&lt;/span&gt;&lt;span&gt;]::StartNew()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Push-Location&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$projectRoot&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;amp; pnpm build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;$buildExitCode&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $LASTEXITCODE&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;finally&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Pop-Location&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$buildTimer.Stop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$buildExitCode&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;[错误] 构建失败（退出码 &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;buildExitCode&lt;/span&gt;&lt;span&gt;），已中止同步。&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Red&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pause&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;51&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;52&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;[OK] 构建成功，耗时 &lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;buildTimer.Elapsed.ToString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;mm\分ss\秒&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Green&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;53&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;54&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ========== Step 2：同步 ==========&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;55&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;56&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;[2/2] 开始同步 dist -&amp;gt; 服务器 &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;remoteDir&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Cyan&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;57&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$syncTimer&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/span&gt;&lt;span&gt;System.Diagnostics.Stopwatch&lt;/span&gt;&lt;span&gt;]::StartNew()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;58&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;59&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$winscpCmd&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;@&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;60&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;open sftp://&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;pass&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;sshHost&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;port&lt;/span&gt;&lt;span&gt; -hostkey=*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;61&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;synchronize remote &quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;distDir&lt;/span&gt;&lt;span&gt;&lt;span&gt;\&quot; &quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;remoteDir&lt;/span&gt;&lt;span&gt;&quot; -delete -criteria=checksum -filemask=&quot;|.user.ini;**/.user.ini&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;62&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;exit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;63&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;@&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;64&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;65&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Join-Path&lt;/span&gt;&lt;span&gt; $PSScriptRoot &lt;/span&gt;&lt;span&gt;&quot;winscp_tmp.txt&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;66&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;System.IO.File&lt;/span&gt;&lt;span&gt;]::WriteAllText(&lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;$winscpCmd&lt;/span&gt;&lt;span&gt;, [&lt;/span&gt;&lt;span&gt;System.Text.Encoding&lt;/span&gt;&lt;span&gt;]::ASCII)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;67&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;68&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;amp; &lt;/span&gt;&lt;span&gt;$winscpPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;tmp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logFile&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;69&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$syncExitCode&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; $LASTEXITCODE&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;70&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;71&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Remove-Item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$tmp&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ErrorAction SilentlyContinue&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;72&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$syncTimer.Stop&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;73&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;74&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ========== 汇总报告 ==========&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;75&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;76&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;=============== 发布结果 ===============&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Magenta&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;77&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  构建 ：&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;buildExitCode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;span&gt;&apos;成功&apos;&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;&apos;失败&apos;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  耗时 &lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;buildTimer.Elapsed.ToString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;mm\分ss\秒&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Magenta&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;78&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;  同步 ：&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;syncExitCode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) { &lt;/span&gt;&lt;span&gt;&apos;成功&apos;&lt;/span&gt;&lt;span&gt; } &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;失败(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;syncExitCode&lt;/span&gt;&lt;span&gt;)&quot;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;  耗时 &lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;syncTimer.Elapsed.ToString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;mm\分ss\秒&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Magenta&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;79&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;========================================&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Magenta&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;80&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;81&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;$syncExitCode&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;82&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;[警告] 同步有问题，日志：&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;logFile&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Yellow&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;83&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;84&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;85&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;86&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pause&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;五、避坑指南&lt;a href=&quot;#五避坑指南&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;坑 1：同步方向写反（远程覆盖本地）&lt;a href=&quot;#坑-1同步方向写反远程覆盖本地&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;症状：本地刚 build 的新文件不见了，变回服务器上的旧版本&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;解决：务必使用 &lt;strong&gt;&lt;code&gt;synchronize remote&lt;/code&gt;&lt;/strong&gt;（local = 把本地当成目标，remote = 把远程当成目标）。首次运行前加 &lt;code&gt;-preview&lt;/code&gt; 预览确认。&lt;/p&gt;&lt;hr /&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;坑 2：删除 &lt;code&gt;.user.ini&lt;/code&gt; 报错 &lt;code&gt;Permission denied&lt;/code&gt;&lt;a href=&quot;#坑-2删除-userini-报错-permission-denied&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;症状：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;删除文件 &apos;/www/wwwroot/blog/.user.ini&apos; 时出错&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;无权访问。错误码：3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;服务器返回的错误消息：Permission denied&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;原因：宝塔面板在站点根目录生成的 &lt;code&gt;.user.ini&lt;/code&gt; 设置了文件锁（&lt;code&gt;chattr +i&lt;/code&gt;），root 都删不掉。而且这个文件里存了 &lt;code&gt;open_basedir&lt;/code&gt; 和防跨站设置，&lt;strong&gt;绝不能删&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;解决：同步时用 &lt;code&gt;-filemask=&quot;|.user.ini;**/.user.ini&quot;&lt;/code&gt; 完整排除所有位置的 &lt;code&gt;.user.ini&lt;/code&gt;。&lt;/p&gt;&lt;p&gt;注意排除语法：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;前缀 &lt;strong&gt;&lt;code&gt;|&lt;/code&gt;&lt;/strong&gt; 表示排除（不要写成 &lt;code&gt;!&lt;/code&gt;，WinSCP 的 filemask 语法用 &lt;code&gt;|&lt;/code&gt; 排除）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;**/.user.ini&lt;/code&gt; 匹配所有子目录（和 rclone 里的 &lt;code&gt;**.user.ini&lt;/code&gt; 同理）&lt;/li&gt;
&lt;li&gt;整个 filemask 值&lt;strong&gt;必须加双引号&lt;/strong&gt;，否则分号会被截断&lt;/li&gt;
&lt;/ul&gt;&lt;hr /&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;坑 3：中文乱码 / 脚本解析报错&lt;a href=&quot;#坑-3中文乱码--脚本解析报错&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;&lt;p&gt;症状：PowerShell 执行时报错 &lt;code&gt;The string is missing the terminator&lt;/code&gt;、&lt;code&gt;锟斤拷&lt;/code&gt;、&lt;code&gt;Unexpected token&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;原因：&lt;code&gt;.ps1&lt;/code&gt; 文件保存成了 &lt;strong&gt;UTF-8 无 BOM&lt;/strong&gt;，Windows PowerShell 5.x 默认按系统 ANSI（GBK/CP936）解析，中文字符被解析错位，破坏了引号和花括号的配对。&lt;/p&gt;&lt;p&gt;解决（二选一）：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;VSCode 右下角编码选择 → &lt;strong&gt;通过编码保存&lt;/strong&gt; → &lt;strong&gt;UTF-8 with BOM&lt;/strong&gt;（推荐）&lt;/li&gt;
&lt;li&gt;干脆脚本里所有注释、提示全部用英文，永不乱码&lt;/li&gt;
&lt;/ol&gt;&lt;hr /&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;坑 4：&lt;code&gt;-criteria&lt;/code&gt; 选 size 还是 checksum？&lt;a href=&quot;#坑-4-criteria-选-size-还是-checksum&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;




























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;/th&gt;&lt;th&gt;速度&lt;/th&gt;&lt;th&gt;准确性&lt;/th&gt;&lt;th&gt;适用场景&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-criteria=size&lt;/code&gt;&lt;/td&gt;&lt;td&gt;最快（只看大小）&lt;/td&gt;&lt;td&gt;低&lt;/td&gt;&lt;td&gt;只改内容不改大小的文件会漏同步&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-criteria=time&lt;/code&gt;&lt;/td&gt;&lt;td&gt;快（时间+大小）&lt;/td&gt;&lt;td&gt;中&lt;/td&gt;&lt;td&gt;Windows/Linux 时区不同导致误判（和 rclone 的 mtime 问题一样）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-criteria=checksum&lt;/code&gt;&lt;/td&gt;&lt;td&gt;略慢（算哈希）&lt;/td&gt;&lt;td&gt;最高&lt;/td&gt;&lt;td&gt;&lt;strong&gt;博客部署推荐&lt;/strong&gt;，绝不漏传&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;静态博客站点一般几百 MB 以内，checksum 多花几秒换绝对稳妥，值得。&lt;/p&gt;&lt;hr /&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;坑 5：密码里有特殊字符被转义&lt;a href=&quot;#坑-5密码里有特殊字符被转义&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果 SSH 密码里有 &lt;code&gt;@&lt;/code&gt;、&lt;code&gt;:&lt;/code&gt;、&lt;code&gt;/&lt;/code&gt;、&lt;code&gt;#&lt;/code&gt;、&lt;code&gt;?&lt;/code&gt; 等字符，直接拼在 &lt;code&gt;sftp://user:pass@host&lt;/code&gt; URL 里会被解析成分隔符，导致连接失败。&lt;/p&gt;&lt;p&gt;解决：改用 &lt;code&gt;-username&lt;/code&gt; / &lt;code&gt;-password&lt;/code&gt; / &lt;code&gt;-privatekey&lt;/code&gt; 单独参数（或直接改一个不含特殊字符的密码）：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;open sftp://$sshHost:$port -hostkey=* -username=&quot;$user&quot; -password=&quot;$pass&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;坑 6：连接会自动关闭吗？&lt;a href=&quot;#坑-6连接会自动关闭吗&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;会的。脚本末尾的 &lt;strong&gt;&lt;code&gt;exit&lt;/code&gt;&lt;/strong&gt; 是 WinSCP 内部命令，执行时会：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;发送 SSH 断开消息关闭 SFTP 会话&lt;/li&gt;
&lt;li&gt;关闭 TCP 连接&lt;/li&gt;
&lt;li&gt;退出 &lt;code&gt;WinSCP.com&lt;/code&gt; 进程&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;就算没写 &lt;code&gt;exit&lt;/code&gt;，只要脚本跑完进程退出，操作系统也会自动回收 socket。无需额外处理。&lt;/p&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;六、WinSCP vs rclone 方案对比&lt;a href=&quot;#六winscp-vs-rclone-方案对比&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;两者都能搞定 SFTP 部署，按习惯选一个即可：&lt;/p&gt;












































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;对比项&lt;/th&gt;&lt;th&gt;WinSCP&lt;/th&gt;&lt;th&gt;rclone&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;并发传输&lt;/td&gt;&lt;td&gt;默认单线程，调参较麻烦&lt;/td&gt;&lt;td&gt;&lt;code&gt;--transfers 8&lt;/code&gt; 轻松并发&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;增量策略&lt;/td&gt;&lt;td&gt;支持 size/time/checksum&lt;/td&gt;&lt;td&gt;支持 + &lt;code&gt;--size-only&lt;/code&gt; 快速模式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;GUI 配套&lt;/td&gt;&lt;td&gt;官方自带 GUI，连不上服务器可以开 GUI 排错&lt;/td&gt;&lt;td&gt;纯命令行，需第三方 GUI&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Windows 上手难度&lt;/td&gt;&lt;td&gt;低（老牌 Windows 用户都认识）&lt;/td&gt;&lt;td&gt;中（需命令行思维+配置文件）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;跨平台&lt;/td&gt;&lt;td&gt;仅 Windows&lt;/td&gt;&lt;td&gt;Windows/macOS/Linux 全平台&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;配置方式&lt;/td&gt;&lt;td&gt;直接把参数写脚本里&lt;/td&gt;&lt;td&gt;&lt;code&gt;rclone config&lt;/code&gt; 生成 &lt;code&gt;rclone.conf&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;发布速度&lt;/td&gt;&lt;td&gt;一般（无并发时较慢）&lt;/td&gt;&lt;td&gt;&lt;strong&gt;快&lt;/strong&gt;（并发 + &lt;code&gt;--size-only&lt;/code&gt; 跳过 mtime 坑）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;已经有 rclone 经验的 → 继续用 rclone&lt;/li&gt;
&lt;li&gt;纯 Windows 用户、习惯图形工具、偶尔需要手动传文件的 → WinSCP 方案更顺手&lt;/li&gt;
&lt;/ul&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;七、安全建议（进阶）&lt;a href=&quot;#七安全建议进阶&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;脚本里明文写 SSH 密码虽然方便，但如果要把项目推到公共 Git 仓库（Gitee/GitHub），&lt;strong&gt;务必把包含密码的 &lt;code&gt;.ps1&lt;/code&gt; 脚本加入 &lt;code&gt;.gitignore&lt;/code&gt;&lt;/strong&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;.gitignore&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tools/*.ps1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tools/sync-log.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tools/winscp_tmp.txt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tools/WinSCP.*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;更安全的做法（推荐后续升级）：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;改用 &lt;strong&gt;SSH 密钥登录&lt;/strong&gt;（&lt;code&gt;ssh-keygen&lt;/code&gt; 生成密钥对，公钥放服务器 &lt;code&gt;authorized_keys&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;WinSCP 里用 &lt;code&gt;-privatekey=&quot;C:\Users\你\.ssh\id_ed25519.ppk&quot;&lt;/code&gt; 代替密码&lt;/li&gt;
&lt;li&gt;脚本里不再出现任何敏感信息，可放心提交到 Git&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;</content:encoded></item><item><title>修改显卡型号提升三角洲行动帧率</title><link>https://www.cpdd520.top/posts/delta-force-fps-boost-gpu-model/</link><guid isPermaLink="true">https://www.cpdd520.top/posts/delta-force-fps-boost-gpu-model/</guid><description>通过注册表修改显卡型号，让游戏误判为低端显卡从而降低渲染负载，达到帧率提升效果。附完整注册表定位步骤。</description><pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;原理&lt;a href=&quot;#原理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;将显卡型号修改为低端显卡，让游戏以为你硬件较弱，从而降低渲染负载。而实际上你的高端显卡运行这些”降级”的渲染内容绰绰有余，因此能获得更高的帧率。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;操作方法：注册表修改&lt;a href=&quot;#操作方法注册表修改&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;第一步：获取显卡设备实例路径&lt;a href=&quot;#第一步获取显卡设备实例路径&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;在设备管理器中展开&lt;strong&gt;显示适配器&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;右键点击你的独立显卡（NVIDIA 或 AMD）&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;属性 → 详细信息&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;在下拉菜单中选择&lt;strong&gt;设备实例路径&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;右键点击该路径，选择&lt;strong&gt;复制&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第二步：定位注册表路径&lt;a href=&quot;#第二步定位注册表路径&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;按 &lt;code&gt;Win + R&lt;/code&gt;，输入 &lt;code&gt;regedit&lt;/code&gt; 打开注册表编辑器&lt;/li&gt;
&lt;li&gt;依次打开：&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;Enum&lt;/code&gt; 路径后加上反斜杠 &lt;code&gt;\&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;粘贴刚才复制的&lt;strong&gt;设备实例路径&lt;/strong&gt;，回车定位&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第三步：修改显卡型号&lt;a href=&quot;#第三步修改显卡型号&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在定位到的注册表项中，找到 &lt;strong&gt;&lt;code&gt;DeviceDesc&lt;/code&gt;&lt;/strong&gt;，双击修改：&lt;/p&gt;
















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;设备类型&lt;/th&gt;&lt;th&gt;NVIDIA 用户推荐改为&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;台式机&lt;/td&gt;&lt;td&gt;&lt;code&gt;NVIDIA GeForce GTX 750 Ti&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;笔记本&lt;/td&gt;&lt;td&gt;&lt;code&gt;NVIDIA GeForce GTX 1050 Ti&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;注意事项&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;笔记本最低只能改到 GTX 1050 Ti。不要图省事只改数字，注意 RTX 与 GTX、大小写都要完全一致。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第四步：重启 + 重新预热着色器&lt;a href=&quot;#第四步重启--重新预热着色器&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;修改完成后，先&lt;strong&gt;重启电脑&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;重启后进入游戏：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;进入游戏设置 → 视频&lt;/li&gt;
&lt;li&gt;确认显卡显示为修改后的型号（如 GTX 1050 Ti）&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;“重新预热着色器”&lt;/strong&gt; 按钮&lt;/li&gt;
&lt;li&gt;等待预热完成后，重启游戏生效&lt;/li&gt;
&lt;/ol&gt;&lt;/section&gt;&lt;/section&gt;</content:encoded></item><item><title>解决 PowerShell 禁止运行 .ps1 脚本：ExecutionPolicy 完全指南</title><link>https://www.cpdd520.top/posts/powershell-execution-policy-fix/</link><guid isPermaLink="true">https://www.cpdd520.top/posts/powershell-execution-policy-fix/</guid><description>新装 Windows 后 PowerShell 默认阻止 .ps1 脚本运行，4 步快速设置为 RemoteSigned；并补充执行策略原理、MOTW 拦截、多 Scope 覆盖等进阶排查方案。</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;🌟 概述&lt;a href=&quot;#-概述&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 Windows 上使用 Node.js、pnpm、rclone 部署脚本或运行自建的 &lt;code&gt;deploy.ps1&lt;/code&gt; 时，几乎每个新手都会遇到这个报错：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;无法加载文件 xxx.ps1，因为在此系统上禁止运行脚本。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;有关详细信息，请参阅 https://go.microsoft.com/fwlink/?LinkID=135170&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;中的 about_Execution_Policies。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;+ CategoryInfo          : SecurityError: (:) []，PSSecurityException&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这不是软件有问题，而是 Windows PowerShell 的&lt;strong&gt;默认安全机制&lt;/strong&gt;：默认执行策略 &lt;code&gt;Restricted&lt;/code&gt; 会阻止&lt;strong&gt;所有&lt;/strong&gt; &lt;code&gt;.ps1&lt;/code&gt; 脚本运行（包括你自己写的）。&lt;/p&gt;&lt;p&gt;本文分两部分：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;快速修复（4 步）&lt;/strong&gt;：99% 的普通用户用这部分就够&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进阶排查&lt;/strong&gt;：改完还是不行？很可能是 MOTW（互联网标记）或多 Scope 覆盖导致&lt;/li&gt;
&lt;/ul&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;🚀 快速修复（4 步搞定）&lt;a href=&quot;#-快速修复4-步搞定&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;第 1 步：以管理员身份打开 PowerShell&lt;a href=&quot;#第-1-步以管理员身份打开-powershell&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;右键&lt;strong&gt;开始菜单&lt;/strong&gt; → 点击 &lt;strong&gt;终端(管理员)&lt;/strong&gt; 或 &lt;strong&gt;PowerShell(管理员)&lt;/strong&gt;。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;如果只有普通权限，仅修改 &lt;code&gt;CurrentUser&lt;/code&gt; Scope 时也可以用&lt;strong&gt;普通 PowerShell&lt;/strong&gt;（不一定要管理员，见下文原理）。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 2 步：执行更改策略命令&lt;a href=&quot;#第-2-步执行更改策略命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy RemoteSigned &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Scope CurrentUser&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 3 步：确认更改&lt;a href=&quot;#第-3-步确认更改&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;控制台会弹出：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;是否要更改执行策略?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为&quot;N&quot;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;输入 &lt;code&gt;Y&lt;/code&gt; 回车即可。（想对所有 Scope 一次性确认可输入 &lt;code&gt;A&lt;/code&gt;）&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;第 4 步：重启终端&lt;a href=&quot;#第-4-步重启终端&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;关闭&lt;strong&gt;所有&lt;/strong&gt;已打开的终端窗口（包括 VSCode 内置终端、Windows Terminal、独立 PowerShell 窗口），重新打开即可生效。&lt;/p&gt;&lt;p&gt;此时再运行 &lt;code&gt;deploy.ps1&lt;/code&gt;、&lt;code&gt;npm.ps1&lt;/code&gt;、&lt;code&gt;pnpm.ps1&lt;/code&gt; 等脚本均不再报错。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;RemoteSigned 的安全含义&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;本地你自己创建的脚本：&lt;strong&gt;允许直接运行&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;从网上下载的脚本（浏览器/邮件/聊天软件写入了 Zone.Identifier 标记）：&lt;strong&gt;必须有数字签名才能运行&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;这是个人开发兼顾安全与便利的最佳平衡点，不建议直接改成 &lt;code&gt;Unrestricted&lt;/code&gt; / &lt;code&gt;Bypass&lt;/code&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;📖 执行策略原理速览&lt;a href=&quot;#-执行策略原理速览&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;6 种策略对比&lt;a href=&quot;#6-种策略对比&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;策略&lt;/th&gt;&lt;th&gt;本地脚本&lt;/th&gt;&lt;th&gt;下载脚本&lt;/th&gt;&lt;th&gt;安全性&lt;/th&gt;&lt;th&gt;适用场景&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;&lt;code&gt;Restricted&lt;/code&gt;&lt;/strong&gt;（默认）&lt;/td&gt;&lt;td&gt;❌ 禁止&lt;/td&gt;&lt;td&gt;❌ 禁止&lt;/td&gt;&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;&lt;td&gt;完全不用脚本的普通用户&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;&lt;code&gt;RemoteSigned&lt;/code&gt;&lt;/strong&gt; ✅ 推荐&lt;/td&gt;&lt;td&gt;✅ 允许&lt;/td&gt;&lt;td&gt;✅ 需签名&lt;/td&gt;&lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;&lt;td&gt;个人开发 / 日常使用&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;AllSigned&lt;/code&gt;&lt;/td&gt;&lt;td&gt;✅ 需签名&lt;/td&gt;&lt;td&gt;✅ 需签名&lt;/td&gt;&lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;&lt;td&gt;企业高安全环境&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Unrestricted&lt;/code&gt;&lt;/td&gt;&lt;td&gt;✅ 允许&lt;/td&gt;&lt;td&gt;⚠️ 警告提示后允许&lt;/td&gt;&lt;td&gt;⭐⭐&lt;/td&gt;&lt;td&gt;下载脚本较少的个人用户&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Bypass&lt;/code&gt;&lt;/td&gt;&lt;td&gt;✅ 允许&lt;/td&gt;&lt;td&gt;✅ 静默允许&lt;/td&gt;&lt;td&gt;⭐&lt;/td&gt;&lt;td&gt;特殊 CI/CD 场景（单次生效）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Undefined&lt;/code&gt;&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;td&gt;清除本 Scope 配置，回落上一层&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5 个 Scope 的生效范围&lt;a href=&quot;#5-个-scope-的生效范围&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;执行策略是&lt;strong&gt;分层叠加&lt;/strong&gt;的，从上到下优先级递减（上面的会覆盖下面）：&lt;/p&gt;














































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;优先级&lt;/th&gt;&lt;th&gt;Scope&lt;/th&gt;&lt;th&gt;生效范围&lt;/th&gt;&lt;th&gt;是否要管理员&lt;/th&gt;&lt;th&gt;写入位置&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1（最高）&lt;/td&gt;&lt;td&gt;&lt;code&gt;MachinePolicy&lt;/code&gt;&lt;/td&gt;&lt;td&gt;计算机所有用户（组策略下发）&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;GPO&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;code&gt;UserPolicy&lt;/code&gt;&lt;/td&gt;&lt;td&gt;当前用户（组策略下发）&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;GPO&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;code&gt;Process&lt;/code&gt;&lt;/td&gt;&lt;td&gt;当前终端进程（关闭终端即失效）&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;内存&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;code&gt;CurrentUser&lt;/code&gt; ✅ 推荐&lt;/td&gt;&lt;td&gt;当前用户（永久）&lt;/td&gt;&lt;td&gt;否&lt;/td&gt;&lt;td&gt;注册表 HKCU&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5（最低）&lt;/td&gt;&lt;td&gt;&lt;code&gt;LocalMachine&lt;/code&gt;&lt;/td&gt;&lt;td&gt;本机所有用户（永久）&lt;/td&gt;&lt;td&gt;是&lt;/td&gt;&lt;td&gt;注册表 HKLM&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;修改哪个 Scope？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;个人电脑自己用：改 &lt;strong&gt;&lt;code&gt;CurrentUser&lt;/code&gt;&lt;/strong&gt;（不需要管理员权限，不会影响别的账号）&lt;/li&gt;
&lt;li&gt;多人共用电脑、所有用户都要跑脚本：改 &lt;code&gt;LocalMachine&lt;/code&gt;（需要管理员）&lt;/li&gt;
&lt;li&gt;只想临时让当前终端放行一次：&lt;code&gt;-Scope Process&lt;/code&gt;，关了就失效&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;查看当前所有 Scope 的实际生效值：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;List&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;输出示例（我们想要 MachinePolicy / UserPolicy 都是 Undefined，CurrentUser 是 RemoteSigned）：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Scope ExecutionPolicy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;----- ---------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;MachinePolicy       Undefined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;UserPolicy       Undefined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Process       Undefined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;CurrentUser    RemoteSigned&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LocalMachine       Undefined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;🔧 进阶：改完 RemoteSigned 还是不行？&lt;a href=&quot;#-进阶改完-remotesigned-还是不行&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你按上面 4 步做完仍报”禁止运行脚本”或”未签名”，90% 是下面两种情况之一。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;问题一：文件被标记了”来自互联网”（MOTW）&lt;a href=&quot;#问题一文件被标记了来自互联网motw&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这是最常见的隐蔽坑：即使你把策略改成 &lt;code&gt;RemoteSigned&lt;/code&gt;，&lt;strong&gt;只要文件/压缩包是从浏览器、微信、QQ、邮箱下载的&lt;/strong&gt;，Windows 会自动在 NTFS 备用数据流里加一个 &lt;code&gt;Zone.Identifier&lt;/code&gt;（俗称 MOTW，Mark of the Web），RemoteSigned 会把它们当成”下载脚本”，要求签名。&lt;/p&gt;&lt;section&gt;&lt;h4&gt;典型场景&lt;a href=&quot;#典型场景&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;从 GitHub Release 下载的 zip 解压后里面的所有 &lt;code&gt;.ps1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Node.js / pnpm 安装包是官网下载的，里面的 &lt;code&gt;npm.ps1&lt;/code&gt; / &lt;code&gt;pnpm.ps1&lt;/code&gt; 全部带标记&lt;/li&gt;
&lt;li&gt;别人 QQ 发来的脚本&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;症状&lt;a href=&quot;#症状&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;无法加载文件 C:\Program Files\nodejs\npm.ps1。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;文件 C:\Program Files\nodejs\npm.ps1 没有数字签名。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;你无法在当前系统上运行该脚本。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;而你 &lt;code&gt;Get-ExecutionPolicy&lt;/code&gt; 看到的明明已经是 RemoteSigned。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;解决方法&lt;a href=&quot;#解决方法&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;对被拦截的单个文件解除标记：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Unblock-File&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;C:\Program Files\nodejs\npm.ps1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;批量解除一个目录（含子目录）下所有 &lt;code&gt;.ps1&lt;/code&gt; 的标记：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 对 Node 安装目录（按需改成你自己的路径）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;C:\Program Files\nodejs&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Filter &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.ps1 &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Recurse | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Unblock-File&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 对整个 rclone 解压目录&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ChildItem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;C:\tools\rclone&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Filter &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;.ps1 &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Recurse | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Unblock-File&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;右键文件 → 属性 → 底部勾选”解除锁定” → 确定，本质和 &lt;code&gt;Unblock-File&lt;/code&gt; 是同一个操作。&lt;/p&gt;&lt;/blockquote&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;问题二：组策略覆盖了你的设置（公司电脑/域环境）&lt;a href=&quot;#问题二组策略覆盖了你的设置公司电脑域环境&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;公司加入域的电脑，IT 部门可能通过 GPO 下发了 &lt;code&gt;MachinePolicy&lt;/code&gt; 或 &lt;code&gt;UserPolicy&lt;/code&gt; 的 &lt;code&gt;Restricted&lt;/code&gt; / &lt;code&gt;AllSigned&lt;/code&gt;。由于 GPO 优先级最高，你改 &lt;code&gt;CurrentUser&lt;/code&gt; 会被&lt;strong&gt;静默忽略&lt;/strong&gt;。&lt;/p&gt;&lt;section&gt;&lt;h4&gt;诊断&lt;a href=&quot;#诊断&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;List&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;如果看到 &lt;code&gt;MachinePolicy&lt;/code&gt; 或 &lt;code&gt;UserPolicy&lt;/code&gt; 不是 &lt;code&gt;Undefined&lt;/code&gt;，就是组策略在管。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h4&gt;解决方案（由易到难）&lt;a href=&quot;#解决方案由易到难&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;临时单次放行&lt;/strong&gt;（当前终端生效，无需管理员）：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 方案A：仅当前进程用 Bypass，关闭窗口就还原&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy Bypass &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Scope &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Process&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 方案B：启动 PowerShell 时直接带参数&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;powershell.exe&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy Bypass &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File .\deploy.ps1&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;完全绕开 .ps1 入口&lt;/strong&gt;（以 npm 为例）：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 直接调用 .cmd 版本（不经过 PowerShell 执行策略）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npm.cmd&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 或直接调用 node 跑 CLI（本质逻辑）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;node &lt;/span&gt;&lt;span&gt;&quot;C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js&quot;&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;联系 IT&lt;/strong&gt;：申请白名单或改 GPO（长期方案）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;问题三：PowerShell 5.1 vs PowerShell 7 配置是分开的&lt;a href=&quot;#问题三powershell-51-vs-powershell-7-配置是分开的&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果你同时装了：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows PowerShell 5.1&lt;/strong&gt;（系统自带，&lt;code&gt;powershell.exe&lt;/code&gt;，蓝色图标）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PowerShell 7+&lt;/strong&gt;（自己装的，&lt;code&gt;pwsh.exe&lt;/code&gt;，黑色图标）&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;两者的 ExecutionPolicy 注册表位置&lt;strong&gt;不共用&lt;/strong&gt;，在其中一个里设置了 RemoteSigned，另一个仍然是 Restricted。&lt;/p&gt;&lt;p&gt;分别对两种终端都执行一次：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 分别在 powershell.exe 和 pwsh.exe 里都跑一次&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ExecutionPolicy RemoteSigned &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Scope CurrentUser&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;✅ 验证修复是否成功&lt;a href=&quot;#-验证修复是否成功&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;修改完成后，可以跑三个小测试逐一确认：&lt;/p&gt;&lt;section&gt;&lt;h3&gt;1. 确认策略值&lt;a href=&quot;#1-确认策略值&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ExecutionPolicy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 应输出：RemoteSigned&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 创建一个本地测试脚本&lt;a href=&quot;#2-创建一个本地测试脚本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 创建 + 执行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&quot;Write-Host &apos;✅ 本地脚本可以正常运行啦！&apos;&quot;&lt;/span&gt;&lt;span&gt; &amp;gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;env:USERPROFILE&lt;/span&gt;&lt;span&gt;\Desktop\test-script.ps1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;amp; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;env:USERPROFILE&lt;/span&gt;&lt;span&gt;\Desktop\test-script.ps1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;正常就会输出绿色的成功信息。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 查看所有 Scope 详情&lt;a href=&quot;#3-查看所有-scope-详情&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Get-ExecutionPolicy&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;List | &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Format-Table&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;AutoSize&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;理想状态：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Scope ExecutionPolicy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;----- ---------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;MachinePolicy       Undefined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;UserPolicy       Undefined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Process       Undefined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;CurrentUser    RemoteSigned   ← 关键！这一行是 RemoteSigned&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;LocalMachine       Undefined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;📋 常见报错对应修复速查&lt;a href=&quot;#-常见报错对应修复速查&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;


































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;报错内容&lt;/th&gt;&lt;th&gt;原因&lt;/th&gt;&lt;th&gt;修复&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;”在此系统上禁止运行脚本” + PSSecurityException&lt;/td&gt;&lt;td&gt;默认 Restricted&lt;/td&gt;&lt;td&gt;Set-ExecutionPolicy RemoteSigned -Scope CurrentUser&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;”xxx.ps1 没有数字签名”&lt;/td&gt;&lt;td&gt;下载文件带 MOTW&lt;/td&gt;&lt;td&gt;Unblock-File 目标文件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;自己写的 deploy.ps1 也提示未签名&lt;/td&gt;&lt;td&gt;文件目录是从压缩包解压出来的，整个目录继承了 Zone.Identifier&lt;/td&gt;&lt;td&gt;&lt;code&gt;Get-ChildItem 目录 -Recurse | Unblock-File&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;改了 CurrentUser 还是显示 Restricted&lt;/td&gt;&lt;td&gt;MachinePolicy / UserPolicy 组策略覆盖&lt;/td&gt;&lt;td&gt;用 Bypass -Scope Process 或联系 IT&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;普通 PowerShell 正常，VSCode 终端还是不行&lt;/td&gt;&lt;td&gt;VSCode 旧终端没重启，或者用的是 pwsh.exe 另一个配置&lt;/td&gt;&lt;td&gt;完全关闭 VSCode 重开，或在 pwsh 里也设置一次&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;🎉 总结&lt;a href=&quot;#-总结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;99% 场景的最简方案&lt;/strong&gt;：&lt;code&gt;Set-ExecutionPolicy RemoteSigned -Scope CurrentUser&lt;/code&gt; → 确认 Y → 重启终端&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;下载文件仍提示未签名&lt;/strong&gt;：&lt;code&gt;Unblock-File&lt;/code&gt; 批量清掉 MOTW&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;公司电脑组策略锁死&lt;/strong&gt;：单次用 &lt;code&gt;-Scope Process Bypass&lt;/code&gt; 或直接 &lt;code&gt;powershell.exe -ExecutionPolicy Bypass -File xxx.ps1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;修改前后一定用 &lt;code&gt;Get-ExecutionPolicy -List&lt;/code&gt; 确认&lt;/strong&gt;，避免以为改了但被上层 Scope 覆盖&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;建议收藏本文，Windows 重装后第一时间跑这两行就搞定 PowerShell 脚本运行权限问题。&lt;/p&gt;&lt;a href=&quot;/posts/static-blog-rclone-sync/&quot;&gt;&lt;div&gt;&lt;div&gt;配合 rclone 部署脚本使用&lt;/div&gt;&lt;div&gt;从零开始配置 rclone，通过 sftp 协议将 Astro 等静态博客增量同步到 Linux 服务器，包含密钥生成、rclone 配置、Windows 路径避坑和完整同步命令。&lt;/div&gt;&lt;div&gt;&lt;span&gt;2026-08-07&lt;/span&gt;&lt;span&gt;博客指南&lt;/span&gt;&lt;span&gt;&lt;span&gt;#rclone&lt;/span&gt;&lt;span&gt;#部署&lt;/span&gt;&lt;span&gt;#服务器&lt;/span&gt;&lt;span&gt;#sftp&lt;/span&gt;&lt;span&gt;#博客&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;270&quot; src=&quot;/_astro/rclone-sftp-deploy-cover.pAfadGMm_Z1si9V6.webp&quot; /&gt;&lt;/div&gt;&lt;/a&gt;&lt;/section&gt;</content:encoded></item><item><title>静态博客增量同步到服务器：rclone + sftp 实战指南</title><link>https://www.cpdd520.top/posts/static-blog-rclone-sync/</link><guid isPermaLink="true">https://www.cpdd520.top/posts/static-blog-rclone-sync/</guid><description>从零开始配置 rclone，通过 sftp 协议将 Astro 等静态博客增量同步到 Linux 服务器，包含密钥生成、rclone 配置、Windows 路径避坑和完整同步命令。</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;🌟 概述&lt;a href=&quot;#-概述&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;对于使用 Astro、Hugo、Hexo 等静态博客框架的用户来说，把本地构建好的 &lt;code&gt;dist&lt;/code&gt; 目录上传到服务器是发布流程的关键一步。传统的 FTP/宝塔文件管理器上传方式效率低且容易出错，而 &lt;strong&gt;rclone&lt;/strong&gt; 是目前最优的解决方案之一：增量同步、多协议支持、跨平台、支持校验。&lt;/p&gt;&lt;p&gt;本文将带你从零开始，使用 rclone 的 sftp 协议将静态博客一键同步到 Linux 服务器，并针对 Windows 用户补充了所有路径避坑和时区差异导致的重复上传问题。&lt;/p&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;📦 第一步：安装 rclone&lt;a href=&quot;#-第一步安装-rclone&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;下载&lt;a href=&quot;#下载&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;前往 &lt;a href=&quot;https://rclone.org/downloads/&quot; target=&quot;_blank&quot;&gt;rclone 官网下载页&lt;/a&gt;，下载对应你操作系统的版本。Windows 用户下载 &lt;strong&gt;Intel/AMD - 64 Bit&lt;/strong&gt; 的 &lt;code&gt;.zip&lt;/code&gt; 包。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;解压与环境变量配置&lt;a href=&quot;#解压与环境变量配置&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;C:\Program Files\&lt;/code&gt; 下新建一个 &lt;code&gt;rclone&lt;/code&gt; 目录&lt;/li&gt;
&lt;li&gt;将下载解压后的 &lt;code&gt;rclone.exe&lt;/code&gt; 复制到该目录&lt;/li&gt;
&lt;li&gt;添加环境变量：&lt;strong&gt;系统属性 → 环境变量 → 系统变量 Path → 新建&lt;/strong&gt;，填入：&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Program Files\rclone\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;打开 PowerShell 输入 &lt;code&gt;rclone version&lt;/code&gt;，输出版本号即为安装成功。&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;权限不足？&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;若普通 PowerShell 解压/写入 &lt;code&gt;C:\Program Files\&lt;/code&gt; 提示权限不足，可改用 &lt;code&gt;C:\tools\rclone\&lt;/code&gt; 无 UAC 拦截，对应环境变量也改成该路径即可。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;🔐 第二步：生成 SSH 密钥（免密登录）&lt;a href=&quot;#-第二步生成-ssh-密钥免密登录&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;为了每次同步不需要手动输入密码，我们使用 ed25519 算法生成密钥对。&lt;/p&gt;&lt;section&gt;&lt;h3&gt;生成密钥&lt;a href=&quot;#生成密钥&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 PowerShell 中执行：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;ssh&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;keygen &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;t ed25519&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;一路回车即可（不设密码），生成两个文件：&lt;/p&gt;
















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;路径&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;C:\Users\你的用户名\.ssh\id_ed25519&lt;/code&gt;&lt;/td&gt;&lt;td&gt;私钥（本地保留，千万不要泄露）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;C:\Users\你的用户名\.ssh\id_ed25519.pub&lt;/code&gt;&lt;/td&gt;&lt;td&gt;公钥（放到服务器上）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;将公钥推送到服务器（推荐一键命令）&lt;a href=&quot;#将公钥推送到服务器推荐一键命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;下面的命令会自动创建目录、追加公钥并设置权限，&lt;strong&gt;避免手动复制粘贴导致 echo 错乱&lt;/strong&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 把 64.90.3.3 改成你自己的服务器 IP&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cat ~&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;.ssh&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;id_ed25519.pub | ssh root&lt;/span&gt;&lt;/span&gt;&lt;span&gt;@64.90.3.3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;mkdir -p ~/.ssh &amp;amp;&amp;amp; cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 700 ~/.ssh &amp;amp;&amp;amp; chmod 600 ~/.ssh/authorized_keys&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;如果第一次连接会弹出以下确认，输入 &lt;code&gt;yes&lt;/code&gt; 回车：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Are you sure you want to continue connecting (yes/no)?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;推送完成后，再次 &lt;code&gt;ssh root@你的服务器IP&lt;/code&gt; 登录，如果不再要求输入密码，说明密钥配置成功。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;权限问题排查&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;如果仍然要求输入密码，检查服务器端权限：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;700&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/root/.ssh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;600&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/root/.ssh/authorized_keys&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 仅 CentOS7+/Rocky/AlmaLinux 需要执行 SELinux 上下文修复；Debian/Ubuntu 无需运行&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;restorecon&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-Rv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/root/.ssh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;⚙️ 第三步：rclone 配置文件&lt;a href=&quot;#️-第三步rclone-配置文件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;推荐放置位置&lt;a href=&quot;#推荐放置位置&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在项目根目录创建 &lt;code&gt;rclone.conf&lt;/code&gt;（推荐，配合 &lt;code&gt;--config&lt;/code&gt; 指定路径即可）：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;E:\blog\rclone.conf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;全局配置路径&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;如果想全局生效而不用每次写 &lt;code&gt;--config&lt;/code&gt;，应放在：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;C:\Users\Administrator\.config\rclone\rclone.conf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;（&lt;strong&gt;不是&lt;/strong&gt; &lt;code&gt;C:\Program Files\rclone\&lt;/code&gt;，放在程序目录会触发 UAC 权限拦截，读取失败率高）&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;配置文件完整内容&lt;a href=&quot;#配置文件完整内容&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;[blog-server]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 远程存储类型：sftp 协议&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; sftp&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 服务器 IP 地址&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;host&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 64.90.3.3&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# SSH 登录用户名&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; root&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# SSH 端口，默认 22&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;port&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 22&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 本地私钥绝对路径（ed25519 密钥，免密登录）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# ⚠️ Windows INI 写法：使用正斜杠 / （推荐，跨平台无转义问题）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;key_file&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; C:/Users/Administrator/.ssh/id_ed25519&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 或者双反斜杠也可：key_file = C:\\Users\\Administrator\\.ssh\\id_ed25519&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 远端服务器 shell 类型，linux 统一填 unix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;shell_type&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; unix&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 文件 md5 校验命令（用于哈希比对文件，不填默认尝试探测）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;md5sum_command&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; md5sum&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 文件 sha1 校验命令&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;sha1sum_command&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; sha1sum&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;配置说明&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[blog-server]&lt;/code&gt;：这个括号里的是&lt;strong&gt;远端名称&lt;/strong&gt;，后续同步命令中会用到&lt;/li&gt;
&lt;li&gt;&lt;code&gt;host&lt;/code&gt;：替换为你自己的服务器公网 IP&lt;/li&gt;
&lt;li&gt;&lt;code&gt;user&lt;/code&gt;：如果不用 root 账户就改成对应用户名（远程目录也要对应调整）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;key_file&lt;/code&gt;：Windows &lt;strong&gt;务必使用正斜杠&lt;/strong&gt; &lt;code&gt;C:/Users/...&lt;/code&gt;，避免 INI 中单 &lt;code&gt;\&lt;/code&gt; 被当作转义符导致私钥找不到&lt;/li&gt;
&lt;li&gt;Windows 路径两种合法写法：&lt;code&gt;C:/Users/...&lt;/code&gt; 或 &lt;code&gt;C:\\Users\\...&lt;/code&gt;，&lt;strong&gt;&lt;code&gt;C:\Users\...&lt;/code&gt; 单反斜杠不保证兼容所有版本&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;🚀 第四步：构建与同步命令&lt;a href=&quot;#-第四步构建与同步命令&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;构建项目（以 Astro 为例）&lt;a href=&quot;#构建项目以-astro-为例&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 进入你的博客项目根目录&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;cd E:\blog&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 构建静态站点（生成 dist 目录）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;测试 rclone 连接&lt;a href=&quot;#测试-rclone-连接&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;先列出服务器目标目录，确认配置是否正确：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;rclone lsd &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;E:\blog\rclone.conf&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; blog&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;server:&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;www&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;wwwroot&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;正常情况下会输出服务器上 &lt;code&gt;/www/wwwroot/&lt;/code&gt; 下的目录列表。&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;首次执行目录不存在提示&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;如果提示 &lt;code&gt;directory not found&lt;/code&gt;，属于正常现象——首次同步时 rclone 会自动创建远端目标文件夹，不影响后续使用。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;⚡ 关键参数说明（必读！）&lt;a href=&quot;#-关键参数说明必读&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;












































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;/th&gt;&lt;th&gt;作用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;sync&lt;/code&gt;&lt;/td&gt;&lt;td&gt;使目标与源&lt;strong&gt;完全一致&lt;/strong&gt;（目标中多出的文件会被删除）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;copy&lt;/code&gt;&lt;/td&gt;&lt;td&gt;只上传不删除（保留服务器上额外文件，更安全）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-P&lt;/code&gt; / &lt;code&gt;--progress&lt;/code&gt;&lt;/td&gt;&lt;td&gt;实时显示进度条、传输速度、剩余时间&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--size-only&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;静态博客必备&lt;/strong&gt;——只按文件大小判断是否变更，避开 Windows/Linux 时区 mtime 不一致导致的无变更重复上传&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--dry-run&lt;/code&gt;&lt;/td&gt;&lt;td&gt;干跑模式，列出操作但不实际执行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/td&gt;&lt;td&gt;配合 dry-run 输出更详细的变更日志（包含删除的完整文件清单）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--config&lt;/code&gt;&lt;/td&gt;&lt;td&gt;指定 rclone.conf 配置文件路径&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--exclude&lt;/code&gt;&lt;/td&gt;&lt;td&gt;排除匹配规则的文件（支持通配符 &lt;code&gt;**&lt;/code&gt;）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;--transfers N&lt;/code&gt;&lt;/td&gt;&lt;td&gt;并发传输数，sftp 默认 4；低配服务器建议 4~8，高配可调至 16&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;hr /&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;先干跑再正式跑（推荐必做）&lt;a href=&quot;#先干跑再正式跑推荐必做&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;不确定会不会删错东西？用 &lt;code&gt;--dry-run -v&lt;/code&gt; 先完整模拟一遍：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;rclone sync &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;P &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;dry&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;run &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;v &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;only &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;E:\blog\rclone.conf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;E:\blog\dist&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;blog-server:/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;控制台会输出所有要&lt;strong&gt;上传 / 删除 / 更新&lt;/strong&gt;的文件清单，但不会真的执行。确认无误后再去掉 &lt;code&gt;--dry-run -v&lt;/code&gt; 正式运行。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;正式镜像同步（会删除远端多余文件）&lt;a href=&quot;#正式镜像同步会删除远端多余文件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;rclone sync &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;P &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;only &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;exclude &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;**.user.ini&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;E:\blog\rclone.conf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;E:\blog\dist&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;blog-server:/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;--exclude &quot;**.user.ini&quot;&lt;/code&gt; 会匹配&lt;strong&gt;所有目录&lt;/strong&gt;下的宝塔防跨站 &lt;code&gt;.user.ini&lt;/code&gt; 文件（比单写 &lt;code&gt;.user.ini&lt;/code&gt; 只匹配根目录更可靠）。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;安全上传（不删除服务器文件）&lt;a href=&quot;#安全上传不删除服务器文件&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果你在服务器 &lt;code&gt;dist&lt;/code&gt; 目录下放了别的自定义文件或 &lt;code&gt;.htaccess&lt;/code&gt;，改用 &lt;code&gt;copy&lt;/code&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;rclone copy &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;P &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;only &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;E:\blog\rclone.conf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;E:\blog\dist&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;blog-server:/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;sync 与 copy 的区别&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sync&lt;/code&gt;：镜像（目标 = 源），服务器多余的文件会被删，&lt;strong&gt;好处是不会有残留旧版本&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;copy&lt;/code&gt;：增量追加，&lt;strong&gt;安全但会留下冗余的旧静态文件&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;纯静态博客建议用 &lt;code&gt;sync&lt;/code&gt;，用 &lt;code&gt;--exclude&lt;/code&gt; 保留服务器必要文件即可&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;⚡ 第五步：一键部署&lt;a href=&quot;#-第五步一键部署&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;方案 A：直接在 PowerShell 执行&lt;a href=&quot;#方案-a直接在-powershell-执行&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 构建 + 镜像同步（一行搞定）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;cd E:\blog ; pnpm build ; rclone sync &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;P &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;only &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;exclude &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;**.user.ini&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;E:\blog\rclone.conf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;E:\blog\dist&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;blog-server:/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;方案 B：保存为 deploy.ps1 脚本（推荐，含容错）&lt;a href=&quot;#方案-b保存为-deployps1-脚本推荐含容错&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在博客根目录创建 &lt;code&gt;deploy.ps1&lt;/code&gt;：&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$ErrorActionPreference&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Stop&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 路径定义&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$confPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;$PSScriptRoot\rclone.conf&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$distPath&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;$PSScriptRoot\dist&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$remote&lt;/span&gt;&lt;span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;blog-server:/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 1. 配置文件存在性检查&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;-not&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Test-Path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$confPath&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;❌ 未找到 rclone 配置文件 &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;confPath&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Red&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 2. 构建&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;🔨 开始构建项目...&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Cyan&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; ($LASTEXITCODE &lt;/span&gt;&lt;span&gt;-ne&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;❌ 构建失败，终止部署&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Red&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 3. dist 目录二次校验&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;-not&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Test-Path&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$distPath&lt;/span&gt;&lt;span&gt;)) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;❌ 构建产物目录不存在：&lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span&gt;distPath&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Red&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 4. 同步&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;🚀 开始同步到服务器...&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Cyan&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;rclone sync &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;P &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;only &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;exclude &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;**.user.ini&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$confPath&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$distPath&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$remote&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;&lt;span&gt; ($LASTEXITCODE &lt;/span&gt;&lt;span&gt;-eq&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;✅ 部署完成！&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Green&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Write-Host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;❌ 同步失败，退出码：$LASTEXITCODE&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;ForegroundColor Red&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt; $LASTEXITCODE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;执行方式：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;.\deploy.ps1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;📋 完整流程速查表&lt;a href=&quot;#-完整流程速查表&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;本地准备（一次性）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── 1. 下载 rclone.exe → C:\Program Files\rclone\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── 2. 添加到环境变量 Path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── 3. ssh-keygen -t ed25519 生成密钥&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── 4. cat ~/.ssh/id_ed25519.pub | ssh root@IP \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;mkdir -p ~/.ssh &amp;amp;&amp;amp; cat &amp;gt;&amp;gt; ~/.ssh/authorized_keys \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;amp;&amp;amp; chmod 700 ~/.ssh &amp;amp;&amp;amp; chmod 600 ~/.ssh/authorized_keys&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;配置（一次性）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── rclone.conf → sftp 配置（host / user / key_file 正斜杠 / port）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;每次发布&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── pnpm build                              # 构建 dist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── rclone lsd --config ... blog-server:... # 测试连接（可选）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;├── rclone sync -P --dry-run -v --size-only \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;│     --config ... dist blog-server:...      # 模拟运行（强烈推荐）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;└── rclone sync -P --size-only \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;--exclude &quot;**.user.ini&quot; --config ...   # 正式同步&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span&gt;展开&lt;/span&gt;&lt;span&gt;收起&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;❓ 常见问题&lt;a href=&quot;#-常见问题&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;1. 宝塔站点的 &lt;code&gt;.user.ini&lt;/code&gt; 每次都报错删不掉？&lt;a href=&quot;#1-宝塔站点的-userini-每次都报错删不掉&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这是宝塔自动创建的防跨站文件，&lt;strong&gt;同步命令必须加排除规则&lt;/strong&gt;（推荐用通配匹配所有目录）：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;rclone sync &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;P &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;only &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;exclude &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;**.user.ini&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;E:\blog\rclone.conf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;E:\blog\dist&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;blog-server:/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;或者更安全改用 &lt;code&gt;copy&lt;/code&gt;：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;rclone copy &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;P &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;only &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;E:\blog\rclone.conf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;E:\blog\dist&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;blog-server:/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;2. 连接报错 “Host key verification failed”&lt;a href=&quot;#2-连接报错-host-key-verification-failed&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;首次连接需要手动接受主机指纹。最简单的方法：先用 &lt;code&gt;ssh root@服务器IP&lt;/code&gt; 登录一次，输入 &lt;code&gt;yes&lt;/code&gt; 就会自动记录到 &lt;code&gt;known_hosts&lt;/code&gt;，之后 rclone 就能正常连接。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;3. 为什么相同的文件每次都被重复上传？&lt;a href=&quot;#3-为什么相同的文件每次都被重复上传&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;核心原因：Windows 和 Linux 的文件修改时间（mtime）时区/格式不一致&lt;/strong&gt;，rclone 默认以 &lt;code&gt;size + mtime&lt;/code&gt; 综合判断，本地时间戳与服务器稍有不同就触发重传。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;解决方案：所有 sync/copy 命令务必加 &lt;code&gt;--size-only&lt;/code&gt;&lt;/strong&gt;，只按文件大小判断，静态博客场景下大小不同 = 内容不同，完全准确。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;4. 同步速度慢？&lt;a href=&quot;#4-同步速度慢&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;rclone sftp 默认并发是 4，服务器带宽和 CPU 充裕时可以调大：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 低配服务器：4~8；高配服务器：8~16&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;rclone sync &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;P &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;size&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;only &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;transfers &lt;/span&gt;&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;exclude &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;**.user.ini&quot;&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;E:\blog\rclone.conf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;E:\blog\dist&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;blog-server:/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;⚠️ 不建议直接拉满 16&lt;/strong&gt;：sftp 走 SSH 加密通道，过多并发极易打满低配云服务器 CPU/带宽，导致 SSH 连接断开。从默认 4 开始逐步往上试。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;5. 如何验证同步结果一致？&lt;a href=&quot;#5-如何验证同步结果一致&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# 只做哈希比对，不实际传输&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;rclone check &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;config &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;E:\blog\rclone.conf&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;E:\blog\dist&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;blog-server:/www/wwwroot/blog&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;check 只对比不修复&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;code&gt;rclone check&lt;/code&gt; 仅列出哈希差异文件清单，&lt;strong&gt;不会自动修复&lt;/strong&gt;。若发现不一致，重新执行同步命令（sync/copy）即可覆盖修复。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;6. Windows 配置中 &lt;code&gt;key_file&lt;/code&gt; 提示私钥找不到？&lt;a href=&quot;#6-windows-配置中-key_file-提示私钥找不到&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;检查这两点：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;是否用了&lt;strong&gt;单 &lt;code&gt;\&lt;/code&gt;&lt;/strong&gt;（例如 &lt;code&gt;C:\Users\...&lt;/code&gt;）→ 必须改成正斜杠 &lt;code&gt;C:/Users/...&lt;/code&gt; 或双反斜杠 &lt;code&gt;C:\\Users\\...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;路径中是否有中文或空格 → 有空格时在 INI 里不需要加引号，rclone 自动处理&lt;/li&gt;
&lt;/ul&gt;&lt;hr /&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;🎉 总结&lt;a href=&quot;#-总结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;整个流程只需要配置一次，之后发布新文章就是一个命令的事：&lt;strong&gt;构建 + 同步&lt;/strong&gt;。相比传统方式：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;增量同步 + &lt;code&gt;--size-only&lt;/code&gt;&lt;/strong&gt;：只传真正变化的文件，完美避开 Windows/Linux 时间戳差异&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;哈希校验&lt;/strong&gt;：内置 md5/sha1 比对，防止传输损坏&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;SSH 加密 + 密钥登录&lt;/strong&gt;：走 sftp 协议，比 FTP 安全得多&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;全链路容错&lt;/strong&gt;：&lt;code&gt;--dry-run&lt;/code&gt; 预演 + &lt;code&gt;--exclude &quot;**.user.ini&quot;&lt;/code&gt; 防误删 + 部署脚本前置检查&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;跨平台&lt;/strong&gt;：配置正斜杠路径，Windows / macOS / Linux 都能用&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;兼容协议多&lt;/strong&gt;：除了 sftp，还支持 S3、WebDAV、OSS、Cloudflare R2 等 70+ 种存储&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;更多用法可以看 &lt;a href=&quot;https://rclone.org/commands/rclone_sync/&quot; target=&quot;_blank&quot;&gt;rclone sync 官方文档&lt;/a&gt; 和 &lt;a href=&quot;https://rclone.org/sftp/&quot; target=&quot;_blank&quot;&gt;rclone sftp 参数说明&lt;/a&gt;。&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>一款小而实用的桌面时钟</title><link>https://www.cpdd520.top/posts/catime-desktop-clock/</link><guid isPermaLink="true">https://www.cpdd520.top/posts/catime-desktop-clock/</guid><description>Catime 是一款用纯 C 语言编写的轻量级桌面时钟工具，体积不到 1MB，零依赖，支持透明悬浮窗、倒计时、自动启动程序等功能，适合游戏、演讲等场景使用。</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;软件简介&lt;a href=&quot;#软件简介&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Catime&lt;/strong&gt; 是一款小巧可爱的 Windows 桌面时钟工具，用纯 C 语言编写，零依赖，基于原生 Win32 API 开发。整个程序体积仅 &lt;strong&gt;803 KB&lt;/strong&gt;，空闲时 CPU 占用为 &lt;strong&gt;0%&lt;/strong&gt;，真正做到了小而美。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;官网：&lt;a href=&quot;https://cati.me/&quot; target=&quot;_blank&quot;&gt;https://cati.me/&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;核心特点&lt;a href=&quot;#核心特点&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;特性&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;体积小巧&lt;/td&gt;&lt;td&gt;不到 1MB，纯 C 架构，零依赖&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;透明悬浮窗&lt;/td&gt;&lt;td&gt;不遮挡屏幕内容，不影响操作&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;倒计时功能&lt;/td&gt;&lt;td&gt;精准计时，支持自动提醒&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;自动启动程序&lt;/td&gt;&lt;td&gt;计时结束后自动打开指定软件&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;托盘动画&lt;/td&gt;&lt;td&gt;支持 GIF/WebP 动图，新增 CPU/RAM 监控&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;完全免费&lt;/td&gt;&lt;td&gt;开源项目，免费使用&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;适用场景&lt;a href=&quot;#适用场景&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;section&gt;&lt;h3&gt;游戏场景&lt;a href=&quot;#游戏场景&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;打游戏时开启 Catime 透明悬浮窗，可以随时掌握时间，避免沉迷。不会遮挡画面，也不影响操作。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;自动启动&lt;a href=&quot;#自动启动&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;计时结束后自动打开指定程序，无需反复确认。比如提醒查收邮件、打开会议软件等。&lt;/p&gt;&lt;/section&gt;&lt;section&gt;&lt;h3&gt;演讲展示&lt;a href=&quot;#演讲展示&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在 PPT 上叠加透明计时器，精准控制演讲节奏，不会遮挡观众视线。&lt;/p&gt;&lt;/section&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;相关链接&lt;a href=&quot;#相关链接&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;GitHub：&lt;a href=&quot;https://github.com/vladelaina/Catime&quot; target=&quot;_blank&quot;&gt;https://github.com/vladelaina/Catime&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;官网：&lt;a href=&quot;https://cati.me/&quot; target=&quot;_blank&quot;&gt;https://cati.me/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;下载链接：&lt;a href=&quot;https://www.ilanzou.com/s/XUaxqMnQ&quot; target=&quot;_blank&quot;&gt;https://www.ilanzou.com/s/XUaxqMnQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;💡 &lt;strong&gt;提示&lt;/strong&gt;：Catime 是开源免费软件，建议从 GitHub Releases 或官网下载最新版本。&lt;/p&gt;&lt;/blockquote&gt;&lt;/section&gt;</content:encoded></item></channel></rss>