123
9

用批处理制作【一键重装系统程序】(仅代码)【一】

系统封装2021-12-25 20:36河南
5929123
用批处理制作【一键重装系统程序】程序执行分两个部分第一部批处理代码
批处理执行流程思路:
1.确认开始
2.检测网络
3.检测更新
4.检测磁盘
5.检测磁盘可用空间
6.检测内存
7.电源设置不休眠
8.执行选择装哪个系统并记录
9.创建并清空程序使用的文件夹
10.下载备用驱动
11.下载PE文件数据
12.校验PE文件
13.获取8选择的系统
14.下载8选择的系统
15.校验系统文件
16.判定引导方式
17.写引导自动进PE

@pushd "%~dp0" >nul 2>&1
@echo off
setlocal enabledelayedexpansion

:START
set Vbscript=Msgbox("请确认关闭安全杀毒类程序后在使用。"^&vbCrLf^&"点击【确定】将自动获取数据并执行本程序。",1+4096, 提醒:")
for /f "Delims=" %%a in ('MsHta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(%Vbscript:"=""%)"^)(Close^)') do Set "MsHtaReturnValue=%%a"
set ReturnValue1=确定
set ReturnValue2=取消或关闭窗口
if %MsHtaReturnValue% == 1 goto Netwoek
if %MsHtaReturnValue% == 2 goto EXIT
rem 这里仅仅是检测下网络是否通
:Netwoek
ping -n 1 baidu.com
if errorlevel == 0 goto Update
if errorlevel == 1 goto NONetwoek

:NONetwoek
mshta vbscript:msgbox("程序运行需要网络,连网都没有搞什么,再见!",16+4096,提醒:")(window.close)
exit
rem 这里检测一下版本是否有新版本原理:下载一下云端的txt然后检测里边内容是否和程序内对应,不对应的话那肯定是有新版本
:Update
aria2c.exe --allow-overwrite=true -i UpdateDownload.txt
ping localhost -n 2 > nul
find /I "V25" update.txt
IF %ERRORLEVEL% EQU 0 goto diskD
IF %ERRORLEVEL% EQU 1 goto NOUpdate

:NOUpdate
mshta vbscript:msgbox("程序检测到已发现新版本,请至xxxx下载最新版本使用!",16+4096, 提醒:")(window.close)
exit
re检测一下是否存在D盘 ,要作为下载的系统文件存放位置。
:diskD
if exist D: (goto SPACExC) else (goto NOdiskD)

:NOdiskD
mshta vbscript:msgbox("没有检测到D盘存在,程序无法存储安装文件及运行。",16+4096, 提醒:")(window.close)
exit
rem 这里检测一下CD可用空间是否足够
:SPACExC
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk %SystemDrive% get FreeSpace/value') do set fsize=%%a
set fsize=%fsize:~0,-10%
if %fsize% gtr 1 (goto SPACExD) else (goto NOSPACE)

:SPACExD
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk D: get FreeSpace/value') do set fsize=%%a
set fsize=%fsize:~0,-10%
if %fsize% gtr 5 (goto ROM) else (goto NOSPACE)

:NOSPACE
mshta vbscript:msgbox("磁盘剩余空间不足,C盘剩余空间>2G,D盘剩余空间>6G,请清理后在尝试。",16+4096,xxxx 提醒:")(window.close)
exit
rem 这里检测一下内存时候大于4G 不够的话第二阶段PE力安装可能会不够用出错所以大4G才能用
:ROM
for /f "tokens=2 delims==" %%a in ('wmic os get totalvisiblememorysize/value') do set rom=%%a
set rom=%rom:~0,-7%
if %rom% gtr 3 (goto Powercfg) else (goto NOROM)

:NOROM
mshta vbscript:msgbox("检测到内存连4G都没有,这么低配置臣妾办不到啊。",16+4096, 提醒:")(window.close)
exit
re这里 电源设置一下 避免长时间下载文件 电脑熄屏
:Powercfg
Powercfg -x -monitor-timeout-ac 0
Powercfg -x -monitor-timeout-dc 0
powercfg -x -standby-timeout-ac 0
powercfg -x -standby-timeout-dc 0
rem 这里检测一下要选择哪个版本安装,并先生成txt记录一下
:SELECT
echo Y|start /wait select.bat
if exist select.txt (goto EditFile) else (goto NOselect)
【这一部分是select.bat里的内容】

@pushd "%~dp0" >nul 2>&1
mode con cols=80 lines=25
@echo off
color f0
title 提醒:选择要安装的系统,输入序列号即可】
echo.
echo.
echo.===============================================================================
echo.                   【选择要安装的系统,输入下列序列号即可】
echo.===============================================================================
echo.
echo.
echo.                         [1]  =  Windows10 (64位专业版)
echo.
echo.
echo.                         [2]  =  Windows11 (64位专业版)
echo.
echo.
echo.                         [3]  =  关闭程序
echo.
echo.
echo.===============================================================================
choice /C:123 /N /M "请输入你要安装的选项 : "
if errorlevel 3 goto :EXIT
if errorlevel 2 goto :WIN11
if errorlevel 1 goto :WIN10

:WIN10
echo WIN10 >select.txt
exit

:WIN11
echo WIN11 >select.txt
exit

:EXIT
echo EXIT >select.txt
exit



:NOselect
mshta vbscript:msgbox("没有执行选择,关闭了选择窗口本程序也即将退出。",16+4096, 提醒:")(window.close)
exit
rem 这里就是简单的文件加创建删除处理
:EditFile

md "%SystemDrive%\PEfile"
attrib +s +a +h +r %SystemDrive%\PEfile
del /f /q "%SystemDrive%\PEfile\*"
md "D:\installWindowsOS"
del /f /q "D:\installWindowsOS\*"
ping localhost -n 3 > nul


rem 这里下载一下网卡版驱动避免装好有些电脑没网卡
:DrvCeo
echo Y|start "■■■■■■■■■■■■■■■正在下载文件中,请勿关闭本窗口■■■■■■■■■■■■■■■" /wait aria2c.exe -s 8 -x 8 --allow-overwrite=true -d D:\installWindowsOS -i DrvCeoDownload.txt
ping localhost -n 3 > nul
if exist D:\installWindowsOS\驱动总裁网卡版.exe.aria2 (goto EXITDownload) else (goto PEDownload)
rem 上边的一条拍段是否强关了下载窗口 是否下载完了,

rem 下边下载PE并包含了校验数据
:PEDownload
echo Y|start "■■■■■■■■■■■■■■■正在下载文件中,请勿关闭本窗口■■■■■■■■■■■■■■■" /wait aria2c.exe --allow-overwrite=true -d %SystemDrive%\PEfile -i PEx1Download.txt
echo Y|start "■■■■■■■■■■■■■■■正在下载文件中,请勿关闭本窗口!■■■■■■■■■■■■■■■" /wait aria2c.exe -s 8 -x 8 --allow-overwrite=true -d %SystemDrive%\PEfile -i PEx2Download.txt
ping localhost -n 3 > nul
if exist %SystemDrive%\PEfile\10PEx64.wim.aria2 (goto EXITDownload) else (goto BOOTSDI)

:BOOTSDI
msg * /time:3 "正在后台校验所下载的文件数据!"
CertUtil -hashfile %SystemDrive%\PEfile\BOOT.SDI SHA1 >BOOT.SDI.txt
ping localhost -n 2 > nul
find /I "c8f481c93682c181a36fa8bbadd1cc71918f13c7" BOOT.SDI.txt
IF %ERRORLEVEL% EQU 0 goto 10PEX64WIM
find /I "c8 f4 81 c9 36 82 c1 81 a3 6f a8 bb ad d1 cc 71 91 8f 13 c7" BOOT.SDI.txt
IF %ERRORLEVEL% EQU 0 goto 10PEX64WIM
IF %ERRORLEVEL% EQU 1 goto PEERROR

:10PEX64WIM
CertUtil -hashfile %SystemDrive%\PEfile\10PEx64.wim SHA1 >10PEx64.wim.txt
ping localhost -n 2 > nul
find /I "ca854dfd31429095b2e02ac2a2e77cfd2ba775da" 10PEx64.wim.txt
IF %ERRORLEVEL% EQU 0 goto READSELECT
find /I "ca 85 4d fd 31 42 90 95 b2 e0 2a c2 a2 e7 7c fd 2b a7 75 da" 10PEx64.wim.txt
IF %ERRORLEVEL% EQU 0 goto READSELECT
IF %ERRORLEVEL% EQU 1 goto PEERROR

:PEERROR
mshta vbscript:msgbox("文件数据不完整或未下载完成,请重新运行程序!",16+4096, 提醒:")(window.close)
exit

:EXITDownload
mshta vbscript:msgbox("下载程序被强行关闭,本程序也即将结束。",16+4096, 提醒:")(window.close)
exit

rem 这里就是获取上边选择要安装哪个版本 并执行下载对应的。
:READSELECT
find /I "WIN10" select.txt
IF %ERRORLEVEL% EQU 0 goto WIN10Download
find /I "WIN11" select.txt
IF %ERRORLEVEL% EQU 0 goto WIN11Download
find /I "EXIT" select.txt
IF %ERRORLEVEL% EQU 0 goto EXIT

:WIN10Download
echo Y|start "■■■■■■■■■■■■■■■正在下载文件中,请勿关闭本窗口■■■■■■■■■■■■■■■" /wait aria2c.exe -s 8 -x 8 --allow-overwrite=true -d D:\installWindowsOS -i WIN10Download.txt
ping localhost -n 3 > nul
if exist D:\installWindowsOS\install.esd.aria2 (goto EXITDownload) else (goto WIN10SHA1)

:WIN10SHA1
msg * /time:5 "正在后台校验所下载的文件数据!"
CertUtil -hashfile D:\installWindowsOS\install.esd SHA1 >install.esd.txt
ping localhost -n 2 > nul
find /I "9c8b1fcb4b61126af5a1016d0bd2bce083112d3c" install.esd.txt
IF %ERRORLEVEL% EQU 0 goto BOOT
find /I "9c 8b 1f cb 4b 61 12 6a f5 a1 01 6d 0b d2 bc e0 83 11 2d 3c" install.esd.txt
IF %ERRORLEVEL% EQU 0 goto BOOT
IF %ERRORLEVEL% EQU 1 goto OSERROR

:WIN11Download
echo Y|start "■■■■■■■■■■■■■■■正在下载文件中,请勿关闭本窗口■■■■■■■■■■■■■■■" /wait aria2c.exe -s 8 -x 8 --allow-overwrite=true -d D:\installWindowsOS -i WIN11Download.txt
ping localhost -n 3 > nul
if exist D:\installWindowsOS\install.esd.aria2 (goto EXITDownload) else (goto WIN11SHA1)

:WIN11SHA1
msg * /time:5 "正在后台校验所下载的文件数据!"
CertUtil -hashfile D:\installWindowsOS\install.esd SHA1 >install.esd.txt
ping localhost -n 2 > nul
find /I "5652a32fb840fff402098970788f48d61e112277" install.esd.txt
IF %ERRORLEVEL% EQU 0 goto BOOT
find /I "56 52 a3 2f b8 40 ff f4 02 09 89 70 78 8f 48 d6 1e 11 22 77" install.esd.txt
IF %ERRORLEVEL% EQU 0 goto BOOT
IF %ERRORLEVEL% EQU 1 goto OSERROR

:OSERROR
set Vbscript=Msgbox("系统文件数据不完整或未下载完成。"^&vbCrLf^&"点击【确定】将再次执行系统下载程序。"^&vbCrLf^&"点击【取消】将关闭本程序,后续可重新运行程序",16+4096,提醒:")
for /f "Delims=" %%a in ('MsHta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(%Vbscript:"=""%)"^)(Close^)') do Set "MsHtaReturnValue=%%a"
set ReturnValue1=确定
set ReturnValue2=取消或关闭窗口
if %MsHtaReturnValue% == 1 goto READSELECT
if %MsHtaReturnValue% == 2 goto EXIT


rem 下边就是拍段引导方式并写入引导并重启进入第二阶段,。
:BOOT
bcdedit >boot.txt
ping localhost -n 2 > nul
find /I "\Windows\system32\winload.exe" boot.txt
IF %ERRORLEVEL% EQU 0 goto MBR
IF %ERRORLEVEL% EQU 1 goto GPT


:MBR
set id1={%time:~6,2%%time:~9,2%9ae2-251d-4c33-8824-1f8b578d028b}

set id2={%time:~6,2%%time:~9,2%a46a-0e56-4c0e-8f82-2602b97a3dd3}
bcdedit /create %id2% /d "EasyUPE" /device
bcdedit /set %id2% ramdisksdidevice partition=%SystemDrive%
bcdedit /set %id2% ramdisksdipath "\PEfile\BOOT.SDI"

bcdedit /create %id1% /d "EasyUPE" /application osloader
bcdedit /set %id1% device ramdisk="[%SystemDrive%]\PEfile\10PEx64.wim",%id2%
bcdedit /set %id1% osdevice ramdisk="[%SystemDrive%]\PEfile\10PEx64.wim",%id2%
bcdedit /set %id1% path \Windows\system32\boot\winload.exe
bcdedit /set %id1% description "EasyUPE"
bcdedit /set %id1% locale zh-CN
bcdedit /set %id1% inherit {bootloadersettings}
bcdedit /set %id1% systemroot \windows
bcdedit /set %id1% detecthal Yes
bcdedit /set %id1% winpe Yes
bcdedit /set %id1% ems no
bcdedit /displayorder %id1% /addlast
bcdedit /bootsequence %id1%
bcdedit /timeout 3
shutdown -r -t 30
set Vbscript=Msgbox("■■■■■■■■■■程序执行完成■■■■■■■■■■"^&vbCrLf^&"将于30秒后自动重启并进入安装步骤"^&vbCrLf^&"点击【确定】将立即重启并进入安装步骤。"^&vbCrLf^&"点击【取消】仍可后续手动重启进入安装步骤。",1+4096," 提醒:")
for /f "Delims=" %%a in ('MsHta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(%Vbscript:"=""%)"^)(Close^)') do Set "MsHtaReturnValue=%%a"
set ReturnValue1=确定
set ReturnValue2=取消或关闭窗口
if %MsHtaReturnValue% == 1 goto shutdown
if %MsHtaReturnValue% == 2 goto EXIT

:GPT
set id1={%time:~6,2%%time:~9,2%9ae2-251d-4c33-8124-178b578d628b}
set id2={%time:~6,2%%time:~9,2%a46a-0e56-4c0e-8fd2-2607b9363dd3}

bcdedit /create %id2% /d "EasyUPE" /device
bcdedit /set %id2% ramdisksdidevice partition=%SystemDrive%
bcdedit /set %id2% ramdisksdipath "\PEfile\BOOT.SDI"
bcdedit /create %id1% /d "EasyUPE" /application osloader

bcdedit /set %id1% device ramdisk="[%SystemDrive%]\PEfile\10PEx64.wim",%id2%
bcdedit /set %id1% osdevice ramdisk="[%SystemDrive%]\PEfile\10PEx64.wim",%id2%
bcdedit /set %id1% path \Windows\system32\boot\winload.efi
bcdedit /set %id1% description "EasyUPE"
bcdedit /set %id1% locale zh-CN
bcdedit /set %id1% inherit {bootloadersettings}
bcdedit /set %id1% systemroot \windows
bcdedit /set %id1% detecthal Yes
bcdedit /set %id1% winpe Yes
bcdedit /set %id1% ems no
bcdedit /displayorder %id1% /addlast
bcdedit /bootsequence %id1%
bcdedit /timeout 3
shutdown -r -t 30
set Vbscript=Msgbox("■■■■■■■■■■程序执行完成■■■■■■■■■■"^&vbCrLf^&"将于30秒后自动重启并进入安装步骤"^&vbCrLf^&"点击【确定】将立即重启并进入安装步骤。"^&vbCrLf^&"点击【取消】仍可后续手动重启进入安装步骤。",1+4096," 提醒:")
for /f "Delims=" %%a in ('MsHta VBScript:Execute("CreateObject(""Scripting.Filesystemobject"").GetStandardStream(1).Write(%Vbscript:"=""%)"^)(Close^)') do Set "MsHtaReturnValue=%%a"
set ReturnValue1=确定
set ReturnValue2=取消或关闭窗口
if %MsHtaReturnValue% == 1 goto shutdown
if %MsHtaReturnValue% == 2 goto EXIT

:EXIT
shutdown -a
exit

:shutdown
shutdown -a

shutdown -r -t 0
exit

下边打包好的批处理文件 仅包含批处理。
查看附件 - 两个批处理文件.zip

查看附件

全部回复 123
hashiqi

主题: 53

回复: 216

关注: 3

粉丝: 9

TA 的积分
  • 7840
  • 557
  • 5