Windows 软件批量静默安装

勾选软件 · 设置安装目录 · 一键生成 install.bat

使用说明(点击展开)

整体流程

  1. 勾选要安装的软件(可多选,全选/清空按钮)
  2. 设置"自定义安装目录",例如 D:\APPS
  3. 点"生成安装脚本",浏览器下载 install.bat
  4. 右键 → 以管理员身份运行 install.bat(脚本会自己提权,但首次需要点"是")
  5. 等待下载(顶部进度条)→ 自动安装 → 完成

安装目录的两种模式

  • 自定义目录(推荐):填 D:\APPS 之类的路径。
    脚本会先在系统默认位置(如 C:\Program Files\Google\Chrome\Application
    建一个 junction(软连接) 指向 D:\APPS\Google\Chrome\Application
    安装器无感地装到 D 盘,但所有软件/快捷方式/注册表都还以为自己在 C 盘。
  • 默认位置:勾选"使用软件默认安装位置"。
    不建 junction,安装器装到哪就放哪。适合 C 盘空间够、不在乎重装时丢配置的场景。

注意事项

  1. 不是所有软件官网都可以获取到直链下载,脚本目前还不完善,所以当链接状态为失效时,要自己手动点击官网下载安装包,按照提示进行重命名,让 install.bat 安装脚本放在同一个目录下安装

/clean 参数

第一次跑会建 junction。但如果你之前已经装过这些软件到默认位置,linkFrom 已经是一个真实文件夹,脚本会跳过建 junction(旧文件不会被删,避免误删你的现有安装)。

想强制重来?给 install.bat 加 /clean 参数再跑:

install.bat /clean

会先把默认位置的旧真实安装整个删掉,再建 junction,最后装到自定义目录。

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 音乐官网等格式)。

常见问题

Q:报错"无法创建文件,因为该文件已存在"(mklink 失败)

A:默认位置已经存在同名文件夹/文件。跑 install.bat /clean,脚本会先删掉旧的再建 junction。

Q:装到一半报错,但实际文件已经在自定义目录里了

A:junction 被安装器破坏了。脚本会自愈(扫描注册表、邻居目录),把散落的文件搬到目标位置再重建 junction。如果自愈也失败,看控制台红色提示手动处理。

Q:桌面快捷方式是破的/红叉

A:迁移成功后脚本会自动扫描桌面/开始菜单的 .lnk 文件,把指向旧路径的快捷方式改到新路径。如果 Windows 缓存了旧图标,右键 → 属性 → 更改图标 刷新一下,或重启资源管理器。

Q:多个软件一起装但只有一个在下载

A:必须全是 URL 下载的软件才会并行。已经在本地([本地] 标签)的文件不下载,直接装。如果都是 URL 仍只有一个在跑,检查是否被 BITS 调度器限速(已默认用 Foreground 跳过节流)。

Q:进度条卡在某个百分比不动

A:CDN 抽风是常态。等 30 秒看看,超过 2 分钟没动按 Ctrl+C 重跑即可,BITS 断点续传不会重复下载已完成部分。

注意事项

  • 必须以管理员身份运行 install.bat(junction 和 Program Files 写入都需要权限)
  • Win10 1809 以下系统 BITS 行为可能不同,建议用 Win10 1903+ 或 Win11
  • 杀毒软件可能误报(安装器自带驱动/服务时常见),临时关掉或加白名单
  • 软件版本号差异可能导致 silent_args 失效,遇到具体软件报错查官方文档
更新日志(点击展开)

更新日志

v1.0.4 (2026-06-13)

修复

  • 自动抓取会清空历史 Win10/Win11/Win7 数据
    • 现象:点击"自动获取最新"后,原本已有的 Win10/Win11 历史版本 / Win7 全部条目消失,只剩默认的 8 条 Win11 + 新抓的 28 条 Win7 = 36 条
    • 根因:抓取时主存储用 fileName 当 key,但之前导入/抓取留下的 60 条没有 fileName 字段,最后 array_values($byName) 写回时把它们全部丢掉了
    • 修:主存储改用 ed2k 当 key(所有条目都有),新条目补上 fileName,匹配到老条目时把 fileName/date/size 回填进去;写回时合并 $byEd2k + 无 ed2k 孤条目
    • 验证:抓取前 68 → 抓取后 68(Win11=36 / Win10=4 / Win7=28),再次抓取 0 丢失、0 重复新增

v1.0.3 (2026-06-12)

新增

  • ISO 自动获取功能(🔄 自动获取最新 按钮)
    • iso_proxy.php?action=fetch 端点:模拟浏览器请求卡饭论坛 Tarchia 维护帖(thread-2220135)+ Win7 老帖(thread-1777020)
    • 抓 Win10/11 最新 3 个版本(最新版小节 142/141/131 楼)+ Win7 全版本(28 条 ED2K,含 SP1 / 各语言 / x86 x64)
    • 一键入库;自动去重(按 fileName + ed2k 双向 key),按月增量更新
    • 抓取结果按系统分类统计:Win11 / Win10 / Win7 / 其它
    • 前端工具栏新增蓝色 "🔄 自动获取最新" 按钮;执行时变 "抓取中..." 禁用 + 状态栏 loading
    • 完成后弹窗显示:抓取耗时 / Win10/11 抓取/新增/覆盖 / Win7 抓取/新增/覆盖 / 总条数变化
  • Win7 镜像数据补充
    • 之前默认数据只有 8 条 Win11;现在一键 fetch 后总数 8 → 68(含 28 条 Win7 完整镜像 + 36 条 Win11 + 4 条 Win10)

修复

  • ed2k 链接被 JSON 转义:写入 windows_iso.json/ 被转义为 \/,导致迅雷/电驴无法识别
    • save_data() 增加 JSON_UNESCAPED_SLASHES 标志
  • 文件名解析 system 字段空白(自动抓取后所有 Win10/11/Win7 都识别不出系统名):
    • 根因:正则 /windows\s*(\d+)\b/i\bwindows_11_ / windows_7_ 的下划线边界不生效(_ 是 word char)
    • 修:把 \b 改成 lookahead (?=$|[\s_-]);同时把 \s 扩成 [\s_-]
    • 增加 w7 别名 fallback(少数 Win7 文件名可能用 W7 简写)
  • fetch 端点重复 require 时数据丢失:确保每次 fetch 都是独立 PHP 进程(CLI 调试时拆开跑)

v1.0.2 (2026-06-11)

新增

  • 自定义下载链接("其它工具"容器)
    • 新增 custom_links.json 数据源,支持分类、描述、URL 三种类型条目
    • 增删条目仅需编辑 JSON,刷新页面立即生效
    • 自动隐藏空分类(避免留空块)
  • 激活工具代码气泡
    • JSON 中带 code 字段的条目,名字会渲染为按钮(不再跳转)
    • 点击弹气泡:浅色代码块 + 复制按钮(用 navigator.clipboard,回退 execCommand
    • 关闭方式:点空白 / Esc / 滚轮 / 改变窗口大小 / 点 ×
  • 安装日志(控制台 + 文件双输出)
    • 日志文件与 install.bat 同目录,命名 install_yyyyMMdd_HHmmss.log
    • 所有 Write-Host 改为 Write-Log 函数,时间戳 + 颜色 + 落盘
    • 脚本结束打印日志文件路径
  • 桌面快捷方式自动补建:验证通过后按 filename 自动创建 桌面/<软件名>.lnk(解决安装器被超时 kill 漏建的问题)
  • 6 款新软件:360极速浏览器X、Bandizip、搜狗输入法、123云盘、优酷、UU加速器

修复

  • Ctrl+C 只取消当前软件、继续后续安装
    • 捕获 System.Management.Automation.PipelineStoppedException(Ctrl+C 触发的控制流)
    • 原本进程会直接终止;现在只跳过当前软件的剩余步骤,foreach 继续下一个
  • 百度网盘 junction 缺失:补全 junction.from%APPDATA%\baidu\BaiduNetdisk,软连接到用户目录
  • 百度网盘安装卡死脚本
    • Start-Process -Wait 会等子进程(如 BaiduUpdateSvc.exe),永远不返回
    • 改为最多等 90 秒:超时强制 Stop-Process 安装器本身(后台服务保留)
  • 超时后被误判为失败:去掉 "ExitCode ≠ 0 ⇒ 失败" 的硬判断,改为验证目标目录文件为准
  • popover 代码区配色看不见:改用浅灰底 + 深色字 + 选中文本黄底深字
  • popover 居中:改 position: fixed + transform: translateX(-50%) 真正水平居中于 trigger
  • popover 标题支持点击跳转:有 url 时标题变链接 + 角标
  • popover 关闭逻辑:滚动/点击外部只关不闪烁(事件 closest 判断内部)

体验优化

  • 三个折叠面板统一外观(使用说明 / 更新日志 / 其它工具):
    • 共用 .panel-block 容器:白底 / 10px 圆角 / 统一边框 / 阴影
    • 自定义 ▶ 箭头 + 旋转动画(替代浏览器默认三角)
    • 右侧灰色"(点击展开)"提示,展开后自动隐藏
    • MD 内容共用 .panel-content 一套样式(md-h* / md-ul / md-quote / code / pre
  • "其它工具"容器与搜索框间距:底部 margin 0 → 32px

v1.0.1 (2026-06-10)

新增

  • 支持 BITS 并行下载 多个软件,跳过 BITS 调度器节流(用 Priority Foreground
  • 支持 junction(软连接) 把软件装到自定义目录,默认位置是 reparse point
  • 桌面 / 开始菜单快捷方式 自动迁移:安装后扫描 .lnk 文件并把目标路径指向新位置
  • 批量安装失败的 自愈机制
    • 自愈 #1:junction 被安装器破坏时,把残余文件搬到目标目录
    • 自愈 #2:junction 损坏且 linkFrom 空,从注册表反查实际安装位置并迁移
    • 兜底 #3:扫描邻居目录(如 Program Files / Program Files (x86)
  • 支持 PowerShell 脚本执行:脚本超 32K 时改用文件方式(certutil 解码 + UTF-16LE BOM)
  • 支持 URL 自动获取:GitHub Releases / Mozilla / QQ 音乐官网等格式

修复

  • 修复 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 剥离导致路径含空格时错误
  • 修复单个 URL 下载时一切正常,多软件一起装时 foreach ($j in $jobs) 访问 $j.Bits 报 NPE
  • 修复网易云音乐 junction.from 路径错误(64 位装到 C:\Program Files 不是 (x86)

体验优化

  • 安装 BAT 自动以管理员身份运行(UAC 提权)
  • /clean 参数:强制清理默认位置的旧真实安装,再建 junction
  • 进度条自适应 BytesTotal 异常(CDN 返回 TB 级值时只显示已下载量)

下一版计划

  • 支持按分组全选(按 category 批量勾选)
  • 自定义下载链接支持本地相对路径(项目内可携带安装包)
  • 卸载/迁移单独的工具入口
Windows 系统(点击展开)
加载中...
加载中...
数据来源:卡饭论坛 Tarchia 维护帖(每月更新)
已选 0 / 0 个   

安装目录

使用自定义目录时,会通过 mklink /J 将默认安装路径链接到该目录。

software.json 中可自由添加、修改软件及其下载链接