- Phase 1: +PowerShell 7/Python 3.12/uv, pwsh升为核心依赖
- Phase 4: 修复缓存命中后仍弹密码框的逻辑缺陷
- Phase 5: 新增 {{PWSH_PATH}} 占位符渲染
- Phase 6: npm cache add + uv tool install 预缓存(超时保护)
- Phase 7: Start-Process pwsh 独立窗口启动Claude
- install.ps1: Render函数添加 {{PWSH_PATH}} + Start-Process启动
- OneClick.bat: 新增步骤4/8安装PowerShell 7
- 所有.bat: start pwsh新窗口模式 + CRLF修复
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
281 lines
11 KiB
Batchfile
281 lines
11 KiB
Batchfile
@echo off
|
|
chcp 65001 > nul 2>&1
|
|
title Bookworm Smart Assistant - 全自动安装
|
|
|
|
:: ─── 自动提升管理员权限 ──
|
|
:: 用 goto 而非 if() 避免文件名含括号(如"(2)")导致解析崩溃
|
|
net session >nul 2>&1
|
|
if %errorlevel% equ 0 goto :IS_ADMIN
|
|
|
|
echo 需要管理员权限来安装软件,正在请求...
|
|
echo Set objShell = CreateObject("Shell.Application") > "%TEMP%\bw_elevate.vbs"
|
|
echo objShell.ShellExecute "cmd.exe", "/k cd /d ""%~dp0"" & ""%~nx0""", "", "runas", 1 >> "%TEMP%\bw_elevate.vbs"
|
|
cscript //nologo "%TEMP%\bw_elevate.vbs"
|
|
del /f /q "%TEMP%\bw_elevate.vbs" 2>nul
|
|
exit /b
|
|
|
|
:IS_ADMIN
|
|
|
|
:: ─── 初始化 ─────────────────────────────────────────
|
|
setlocal EnableDelayedExpansion
|
|
color 1F
|
|
set "NO_PROXY=bww.letcareme.com,code.letcareme.com,letcareme.com,localhost,127.0.0.1"
|
|
set "no_proxy=%NO_PROXY%"
|
|
set "INSTALL_DIR=%USERPROFILE%\bookworm-boot"
|
|
set "GITEA_URL=https://code.letcareme.com/bookworm/bookworm-boot.git"
|
|
set "ERRORS=0"
|
|
set "NEED_PATH_REFRESH=0"
|
|
|
|
echo.
|
|
echo +============================================================+
|
|
echo ^| ^|
|
|
echo ^| Bookworm Smart Assistant ^|
|
|
echo ^| 全自动安装程序 v2.0 ^|
|
|
echo ^| ^|
|
|
echo ^| 全新电脑? 没问题! 双击即可, 全程无需手动操作 ^|
|
|
echo ^| ^|
|
|
echo ^| 自动安装: Node.js + Git + Claude Code + Bookworm 配置 ^|
|
|
echo ^| ^|
|
|
echo +============================================================+
|
|
echo.
|
|
|
|
:: ─── 步骤 1/8: winget 检测 ──────────────────────────
|
|
echo [1/8] 检测包管理器...
|
|
where winget >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo.
|
|
echo [!!] winget 未安装 (Windows 10 1809+ / Windows 11 自带)
|
|
echo.
|
|
echo 请先安装 "应用安装程序":
|
|
echo 1. 打开 Microsoft Store
|
|
echo 2. 搜索 "应用安装程序" 或 "App Installer"
|
|
echo 3. 点击安装/更新
|
|
echo 4. 安装后重新运行本程序
|
|
echo.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
echo [OK] winget 可用
|
|
echo.
|
|
|
|
:: ─── 步骤 2/8: 安装 Git ────────────────────────────
|
|
echo [2/8] 检查 Git...
|
|
where git >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo [..] Git 未安装, 正在通过 winget 安装...
|
|
winget install Git.Git --accept-source-agreements --accept-package-agreements --silent
|
|
if !errorlevel! neq 0 (
|
|
echo [!!] Git 安装失败
|
|
set /a ERRORS+=1
|
|
) else (
|
|
echo [OK] Git 安装成功
|
|
set "NEED_PATH_REFRESH=1"
|
|
)
|
|
) else (
|
|
echo [OK] Git 已安装
|
|
)
|
|
echo.
|
|
|
|
:: ─── 步骤 3/8: 安装 Node.js ────────────────────────
|
|
echo [3/8] 检查 Node.js...
|
|
where node >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo [..] Node.js 未安装, 正在通过 winget 安装...
|
|
winget install OpenJS.NodeJS.LTS --accept-source-agreements --accept-package-agreements --silent
|
|
if !errorlevel! neq 0 (
|
|
echo [!!] Node.js 安装失败
|
|
set /a ERRORS+=1
|
|
) else (
|
|
echo [OK] Node.js LTS 安装成功
|
|
set "NEED_PATH_REFRESH=1"
|
|
)
|
|
) else (
|
|
echo [OK] Node.js 已安装
|
|
)
|
|
echo.
|
|
|
|
:: ─── 步骤 4/8: 安装 PowerShell 7 ────────────────────
|
|
echo [4/8] 检查 PowerShell 7...
|
|
where pwsh >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo [..] PowerShell 7 未安装, 正在通过 winget 安装...
|
|
winget install Microsoft.PowerShell --accept-source-agreements --accept-package-agreements --silent
|
|
if !errorlevel! neq 0 (
|
|
echo [!!] PowerShell 7 安装失败
|
|
set /a ERRORS+=1
|
|
) else (
|
|
echo [OK] PowerShell 7 安装成功
|
|
set "NEED_PATH_REFRESH=1"
|
|
)
|
|
) else (
|
|
echo [OK] PowerShell 7 已安装
|
|
)
|
|
echo.
|
|
|
|
:: ─── 刷新 PATH (新装软件需要) ────────────────────────
|
|
if "%NEED_PATH_REFRESH%"=="1" (
|
|
echo [..] 刷新系统 PATH...
|
|
:: 重新加载 Machine + User PATH
|
|
for /f "tokens=2*" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path 2^>nul') do set "SYS_PATH=%%b"
|
|
for /f "tokens=2*" %%a in ('reg query "HKCU\Environment" /v Path 2^>nul') do set "USR_PATH=%%b"
|
|
set "PATH=!SYS_PATH!;!USR_PATH!"
|
|
:: 同时添加常见 Node.js / Git 路径
|
|
set "PATH=!PATH!;C:\Program Files\nodejs;C:\Program Files\Git\cmd;C:\Program Files\Git\usr\bin;C:\Program Files\PowerShell\7"
|
|
echo [OK] PATH 已刷新
|
|
echo.
|
|
)
|
|
|
|
:: ─── 二次验证: Git + Node + pwsh ─────────────────────
|
|
where git >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo [FATAL] Git 仍然不可用
|
|
echo 请关闭此窗口, 手动安装 Git 后重新运行
|
|
pause
|
|
exit /b 1
|
|
)
|
|
where node >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo [FATAL] Node.js 仍然不可用
|
|
echo 请关闭此窗口, 手动安装 Node.js 后重新运行
|
|
pause
|
|
exit /b 1
|
|
)
|
|
where pwsh >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo [WARN] PowerShell 7 未就绪, Claude Code 将使用 PowerShell 5.1
|
|
)
|
|
|
|
:: ─── 步骤 5/8: 安装 Claude Code ─────────────────────
|
|
echo [5/8] 检查 Claude Code...
|
|
:: 国内 npm 镜像 - 淘宝源, 避免 npmjs.org 超时
|
|
call npm config set registry https://registry.npmmirror.com 2>nul
|
|
where claude >nul 2>nul
|
|
if %errorlevel% neq 0 (
|
|
echo [..] Claude Code 未安装, 正在通过 npm 安装 - 淘宝镜像加速...
|
|
call npm i -g @anthropic-ai/claude-code 2>&1
|
|
if !errorlevel! neq 0 (
|
|
echo [!!] Claude Code 安装失败
|
|
echo 请手动运行: npm i -g @anthropic-ai/claude-code
|
|
set /a ERRORS+=1
|
|
) else (
|
|
echo [OK] Claude Code 安装成功
|
|
)
|
|
) else (
|
|
echo [OK] Claude Code 已安装
|
|
)
|
|
echo.
|
|
|
|
:: ─── 步骤 6/8: 克隆/更新 Bookworm ──────────────────
|
|
echo [6/8] 同步 Bookworm 配置...
|
|
|
|
:: 配置 git credential helper (免重复输密码)
|
|
git config --global credential.helper manager 2>nul
|
|
|
|
if exist "%INSTALL_DIR%\.git" (
|
|
echo 已有安装, 更新到最新版...
|
|
pushd "%INSTALL_DIR%"
|
|
git pull 2>&1
|
|
popd
|
|
) else (
|
|
if exist "%INSTALL_DIR%" (
|
|
echo 清理非 git 目录后重新下载...
|
|
rmdir /s /q "%INSTALL_DIR%" 2>nul
|
|
)
|
|
echo 首次下载 (需要输入 Gitea 用户名密码)...
|
|
git clone "%GITEA_URL%" "%INSTALL_DIR%" 2>&1
|
|
if !errorlevel! neq 0 (
|
|
echo.
|
|
echo [!!] 下载失败, 请检查:
|
|
echo - 网络是否正常
|
|
echo - Gitea 用户名密码是否正确
|
|
echo - 管理员是否已开通访问权限
|
|
echo.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
)
|
|
echo [OK] Bookworm 文件已就绪
|
|
echo.
|
|
|
|
:: ─── 步骤 7/8: 执行安装配置 ────────────────────────
|
|
echo [7/8] 执行安装配置...
|
|
echo.
|
|
|
|
if exist "%INSTALL_DIR%\install.ps1" (
|
|
:: 优先 pwsh (PowerShell 7), 回退 powershell (5.1)
|
|
where pwsh >nul 2>nul
|
|
if !errorlevel! equ 0 (
|
|
pwsh -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -AutoAccept
|
|
) else (
|
|
powershell -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -AutoAccept
|
|
)
|
|
) else (
|
|
echo [WARN] install.ps1 未找到, 跳过高级配置
|
|
)
|
|
echo.
|
|
|
|
:: ─── 步骤 8/8: 创建桌面快捷方式 + 完成 ──────────────
|
|
echo [8/8] 创建桌面快捷方式...
|
|
|
|
:: 用 PowerShell 创建快捷方式
|
|
powershell -ExecutionPolicy Bypass -Command ^
|
|
"try{$s=(New-Object -COM WScript.Shell).CreateShortcut([IO.Path]::Combine([Environment]::GetFolderPath('Desktop'),'Bookworm.lnk'));^
|
|
$s.TargetPath='%INSTALL_DIR%\启动Bookworm.bat';^
|
|
$s.WorkingDirectory='%INSTALL_DIR%';^
|
|
$s.Description='Bookworm Smart Assistant';^
|
|
$s.Save();Write-Host ' [OK] 桌面快捷方式: Bookworm' -Fore Green}catch{Write-Host ' [!] 快捷方式创建失败' -Fore Yellow}" 2>nul
|
|
|
|
powershell -ExecutionPolicy Bypass -Command ^
|
|
"try{$s=(New-Object -COM WScript.Shell).CreateShortcut([IO.Path]::Combine([Environment]::GetFolderPath('Desktop'),'更新Bookworm.lnk'));^
|
|
$s.TargetPath='%INSTALL_DIR%\更新并启动Bookworm.bat';^
|
|
$s.WorkingDirectory='%INSTALL_DIR%';^
|
|
$s.Description='Bookworm 更新并启动';^
|
|
$s.Save();Write-Host ' [OK] 桌面快捷方式: 更新Bookworm' -Fore Green}catch{Write-Host ' [!] 快捷方式创建失败' -Fore Yellow}" 2>nul
|
|
|
|
:: 打开使用教程
|
|
if exist "%INSTALL_DIR%\guide.html" (
|
|
start "" "%INSTALL_DIR%\guide.html"
|
|
)
|
|
|
|
echo.
|
|
echo +============================================================+
|
|
echo ^| ^|
|
|
echo ^| 安装完成! ^|
|
|
echo ^| ^|
|
|
echo ^| 已安装: ^|
|
|
echo ^| [v] Node.js LTS — JavaScript 运行时 ^|
|
|
echo ^| [v] Git — 版本控制与配置同步 ^|
|
|
echo ^| [v] PowerShell 7 — 现代终端环境 ^|
|
|
echo ^| [v] Claude Code — AI 编程助手 ^|
|
|
echo ^| [v] Bookworm — 92 Skills / 18 Agents ^|
|
|
echo ^| ^|
|
|
echo ^| 桌面快捷方式: ^|
|
|
echo ^| Bookworm — 日常启动 ^|
|
|
echo ^| 更新Bookworm — 同步最新版后启动 ^|
|
|
echo ^| ^|
|
|
echo ^| 首次启动需要输入管理员提供的主密码 ^|
|
|
echo ^| ^|
|
|
echo +============================================================+
|
|
echo.
|
|
|
|
if %ERRORS% gtr 0 (
|
|
echo [注意] 安装过程中有 %ERRORS% 个警告, 请查看上方日志
|
|
echo.
|
|
)
|
|
|
|
echo 按任意键启动 Bookworm...
|
|
pause > nul
|
|
|
|
:: 启动 — 优先在 pwsh7 新窗口中运行
|
|
cd /d "%INSTALL_DIR%"
|
|
where pwsh >nul 2>nul
|
|
if !errorlevel! equ 0 (
|
|
start "Bookworm Smart Assistant" pwsh -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -StartOnly -AutoAccept
|
|
) else if exist "启动Bookworm.bat" (
|
|
call "启动Bookworm.bat"
|
|
) else (
|
|
powershell -NoLogo -ExecutionPolicy Bypass -File "%INSTALL_DIR%\install.ps1" -StartOnly -AutoAccept
|
|
)
|
|
|
|
endlocal
|