勾选软件 · 设置安装目录 · 一键生成 install.bat
D:\APPSinstall.batD:\APPS 之类的路径。 C:\Program Files\Google\Chrome\Application)D:\APPS\Google\Chrome\Application,第一次跑会建 junction。但如果你之前已经装过这些软件到默认位置,linkFrom 已经是一个真实文件夹,脚本会跳过建 junction(旧文件不会被删,避免误删你的现有安装)。
想强制重来?给 install.bat 加 /clean 参数再跑:
install.bat /clean
会先把默认位置的旧真实安装整个删掉,再建 junction,最后装到自定义目录。
Windows 的 mklink /J 类似 Linux 的符号链接:
C:\Program Files\Google\Chrome\Application --junction--> D:\APPS\Google\Chrome\Application
对安装器/资源管理器/注册表查询完全透明,所有读写都重定向到 D 盘。物理文件全部在 D 盘,C 盘只占几 KB 的 reparse point。
编辑 software.json,加一项:
{
"key名": {
"name": "软件显示名",
"category": "browser", // 对应上方 categories
"url": "https://...exe",
"official": "https://... 官网",
"filename": "installer.exe",
"silent_args": "/S", // 静默安装参数,每个软件不同
"junction": {
"from": "C:\\Program Files\\软件名", // 安装器默认装的位置
"to_subpath": "软件名" // 拼到自定义目录后面
}
}
}
不确定 silent_args?搜"软件名 silent install args",常见的是 /S、/silent、/VERYSILENT /NORESTART。
点软件名旁边的"自动"按钮,脚本会从官方 API / GitHub Releases 拉最新版本下载链接,自动写回 software.json(同时支持 GitHub、火狐官网、QQ 音乐官网等格式)。
A:默认位置已经存在同名文件夹/文件。跑 install.bat /clean,脚本会先删掉旧的再建 junction。
A:junction 被安装器破坏了。脚本会自愈(扫描注册表、邻居目录),把散落的文件搬到目标位置再重建 junction。如果自愈也失败,看控制台红色提示手动处理。
A:迁移成功后脚本会自动扫描桌面/开始菜单的 .lnk 文件,把指向旧路径的快捷方式改到新路径。如果 Windows 缓存了旧图标,右键 → 属性 → 更改图标 刷新一下,或重启资源管理器。
A:必须全是 URL 下载的软件才会并行。已经在本地([本地] 标签)的文件不下载,直接装。如果都是 URL 仍只有一个在跑,检查是否被 BITS 调度器限速(已默认用 Foreground 跳过节流)。
A:CDN 抽风是常态。等 30 秒看看,超过 2 分钟没动按 Ctrl+C 重跑即可,BITS 断点续传不会重复下载已完成部分。
fileName 当 key,但之前导入/抓取留下的 60 条没有 fileName 字段,最后 array_values($byName) 写回时把它们全部丢掉了ed2k 当 key(所有条目都有),新条目补上 fileName,匹配到老条目时把 fileName/date/size 回填进去;写回时合并 $byEd2k + 无 ed2k 孤条目iso_proxy.php?action=fetch 端点:模拟浏览器请求卡饭论坛 Tarchia 维护帖(thread-2220135)+ Win7 老帖(thread-1777020)windows_iso.json 时 / 被转义为 \/,导致迅雷/电驴无法识别save_data() 增加 JSON_UNESCAPED_SLASHES 标志/windows\s*(\d+)\b/i 中 \b 在 windows_11_ / windows_7_ 的下划线边界不生效(_ 是 word char)\b 改成 lookahead (?=$|[\s_-]);同时把 \s 扩成 [\s_-]w7 别名 fallback(少数 Win7 文件名可能用 W7 简写)custom_links.json 数据源,支持分类、描述、URL 三种类型条目code 字段的条目,名字会渲染为按钮(不再跳转)navigator.clipboard,回退 execCommand)Esc / 滚轮 / 改变窗口大小 / 点 ×install.bat 同目录,命名 install_yyyyMMdd_HHmmss.logWrite-Host 改为 Write-Log 函数,时间戳 + 颜色 + 落盘filename 自动创建 桌面/<软件名>.lnk(解决安装器被超时 kill 漏建的问题)System.Management.Automation.PipelineStoppedException(Ctrl+C 触发的控制流)foreach 继续下一个junction.from → %APPDATA%\baidu\BaiduNetdisk,软连接到用户目录Start-Process -Wait 会等子进程(如 BaiduUpdateSvc.exe),永远不返回Stop-Process 安装器本身(后台服务保留)position: fixed + transform: translateX(-50%) 真正水平居中于 triggerurl 时标题变链接 + ↗ 角标closest 判断内部).panel-block 容器:白底 / 10px 圆角 / 统一边框 / 阴影.panel-content 一套样式(md-h* / md-ul / md-quote / code / pre)0 → 32pxPriority Foreground).lnk 文件并把目标路径指向新位置linkFrom 空,从注册表反查实际安装位置并迁移Program Files / Program Files (x86))certutil 解码 + UTF-16LE BOM)Split-Path -LiteralPath ... -Leaf 在 PowerShell 5 上参数集歧义Cannot create a file when that file already exists(mklink 失败)FileStream was asked to open a device that was not a file(用 robocopy 替代 Move-Item)cmd rmdir 引号被 PowerShell 剥离导致路径含空格时错误foreach ($j in $jobs) 访问 $j.Bits 报 NPEjunction.from 路径错误(64 位装到 C:\Program Files 不是 (x86))/clean 参数:强制清理默认位置的旧真实安装,再建 junctionBytesTotal 异常(CDN 返回 TB 级值时只显示已下载量)category 批量勾选)