reinstall/reinstall.bat
2023-12-12 13:09:03 +08:00

104 lines
3.2 KiB
Batchfile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@echo off
setlocal EnableDelayedExpansion
set confhome=https://raw.githubusercontent.com/bin456789/reinstall/main
set github_proxy=raw.fgit.cf
:: Windows 7 SP1 winhttp 默认不支持 tls 1.2
:: https://support.microsoft.com/en-us/topic/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-winhttp-in-windows-c4bd73d2-31d7-761e-0178-11268bb10392
:: 有些系统根证书没更新
:: 所以不要用https
:: 进入脚本目录
cd /d %~dp0
:: 检查是否有管理员权限
openfiles 1>nul 2>&1
if not !errorlevel! == 0 (
echo Please run as administrator^^!
exit /b
)
:: 有时 %tmp% 带会话 id且文件夹不存在
:: https://learn.microsoft.com/troubleshoot/windows-server/shell-experience/temp-folder-with-logon-session-id-deleted
if not exist %tmp% (
md %tmp%
)
:: 检查是否国内
if not exist %tmp%\geoip (
call :download http://www.cloudflare.com/cdn-cgi/trace %tmp%\geoip
)
findstr /c:"loc=CN" %tmp%\geoip >nul
if !errorlevel! == 0 (
:: mirrors.tuna.tsinghua.edu.cn 会强制跳转 https
set mirror=http://mirror.nju.edu.cn
if defined github_proxy (
echo !confhome! | findstr /c:"://raw.githubusercontent.com/" >nul
if !errorlevel! == 0 (
rem set confhome=!github_proxy!/!confhome!
set confhome=!confhome:raw.githubusercontent.com=%github_proxy%!
)
)
) else (
:: mirrors.kernel.org 在荷兰太慢
set mirror=http://mirror.facebook.net
)
:: pkgs 改动了才重新运行 Cygwin 安装程序
set pkgs="curl,cpio,p7zip,bind-utils,ipcalc"
set tags=%tmp%\cygwin-installed-!pkgs!
if not exist !tags! (
:: 检查32/64位
wmic os get osarchitecture | findstr /c:"64" >nul
if !errorlevel! == 0 (
set arch=x86_64
set dir=/sourceware/cygwin
) else (
set arch=x86
set dir=/sourceware/cygwin-archive/20221123
)
:: 下载 Cygwin
call :download http://www.cygwin.com/setup-!arch!.exe %tmp%\setup-cygwin.exe
:: 安装 Cygwin
set site=!mirror!!dir!
%tmp%\setup-cygwin.exe --allow-unsupported-windows^
--quiet-mode^
--only-site^
--site !site!^
--root %SystemDrive%\cygwin^
--local-package-dir %tmp%\cygwin-local-package-dir^
--packages !pkgs!^
&& type nul >!tags!
)
:: 下载 reinstall.sh
if not exist reinstall.sh (
call :download %confhome%/reinstall.sh %~dp0reinstall.sh
)
:: 运行 reinstall.sh
:: 方法1:
:: 在c盘根目录下执行 cygpath -ua . 会得到 /cygdrive/c因此末尾要有 /
for /f %%a in ('%SystemDrive%\cygwin\bin\cygpath -ua ./') do set thisdir=%%a
%SystemDrive%\cygwin\bin\bash -l -c "%thisdir%reinstall.sh %*"
:: 方法2:
:: set PATH=/usr/local/bin:/usr/bin
:: %SystemDrive%\cygwin\bin\bash reinstall.sh %*
exit /b !errorlevel!
:download
:: bits 要求有 Content-Length 才能下载
:: https://learn.microsoft.com/en-us/windows/win32/bits/http-requirements-for-bits-downloads
:: certutil 会被 windows Defender 报毒
echo Download: %~1 %~2
certutil -urlcache -f -split %~1 %~2
exit /b !errorlevel!