无忧启动论坛

标题: 重新修改了下安装pe到本地硬盘的批处理 [打印本页]

作者: wjgyz740526    时间: 2021-8-25 16:59
标题: 重新修改了下安装pe到本地硬盘的批处理
本帖最后由 wjgyz740526 于 2021-9-4 18:04 编辑

经常给别人做系统,很多时候没有pe,就想着做系统的时候最好一起把pe给装到本地硬盘,然后就有了这个脚本(系统安装过程调用即可)。脚本自动判断,如果是efi引导,且ESP分区容量足够的话,就把pe安装到ESP分区,否则把pe安装到磁盘最后一个分区。
用的drvtype是第三方工具,这个在pe下可用,wmic方式pe一般都不能用 ,有这个需求的自己改下


脚本如下:


@echo off
color 3F
setlocal EnableDelayedExpansion

pecmd mess=  安装Windows PE 维护平台...\n本程序会在你的Windows系统菜单上添加PE启动项! \n因本人技术所限,可能存在风险,请知悉!@警告!#ok *5000

pecmd.exe show  -1:-1
bcdedit /enum {current}|find "system32\winload.exe">nul
if %errorlevel% equ 1 (
set bootmode=UEFI
set winload=winload.efi
) else (
set bootmode=Legacy
set winload=winload.exe
)

if exist %~dp0tmp.txt del %~dp0tmp.txt
for /f "tokens=1-5 delims=        " %%a in ('drvtype -a ^|find ":"') do echo %%d>>%~dp0tmp.txt
for /f "delims=        " %%a in (%~dp0tmp.txt) do echo %%a & set HDDList=!HDDList!%%a

for %%b in (!HDDList!) do (
set tmpVol=%%b
call :check
if /i "!judge!" == "ok" (
if /i "%bootmode%" == "uefi" (
if exist !tmpVol!\EFI\Microsoft\Boot\BCD set efi=!tmpVol!
)
)
set LastVol=!tmpVol!
)

if not "!efi!" == "" (
set LastVol=!efi!
pecmd TEAM~ mess= 当前系统引导模式为 %bootmode% ,且ESP分区!efi!容量足够!\n建议安装PE到此分区!\n\n按是开始安装,按否请手工指定安装位置!@警告!#YN *5000 $Y ~WRIT *fv -,$+0,YESNO |find /i "yes"
)
echo %ERRORLEVEL%
if %ERRORLEVEL% EQU 0 (
call :InstPE
) else (
set LastVol=
call :Custom
set /p LastVol=<%~dp0y.txt
if not "!LastVol!" == "" call :InstPE
)

del %~dp0tmp.txt
del %~dp0y.txt
exit





:Custom
if exist %~dp0custom.wcs del %~dp0custom.wcs
if exist %~dp0y.txt del %~dp0y.txt
echo Windows1 >%~dp0custom.wcs
echo _SUB Windows1,W370H200,,MESS= 程序即将关闭!@确定#OK*3000,,0 >>%~dp0custom.wcs
echo LABE Label1,L90T35W300H70,安装Windows PE 维护平台..%~dp0n\n\n请指定要安装的目标分区:      盘 >>%~dp0custom.wcs
echo IMAG Image1,L18T37W60H60,C:\Windows\system32\shell32.dll#40 >>%~dp0custom.wcs
echo LIST List1,L230T68W35H32,,, >>%~dp0custom.wcs
echo ITEM Button1,L150T120W90H30,取消,TEAM MESS= 程序即将关闭!@确定#OK*3000 ^| KILL \%Windows1%,, >>%~dp0custom.wcs
echo ITEM Button2,L255T120W90H30,确定,call _Select >>%~dp0custom.wcs
for %%a in (%HDDList%) do echo ENVI @List1.addsel=%%a  >>%~dp0custom.wcs
echo _END >>%~dp0custom.wcs
echo _SUB _Select >>%~dp0custom.wcs
echo MESS= 你选择将PE安装到%%List1%%盘,按确定之后开始安装! @确定#OK*3000 >>%~dp0custom.wcs
echo WRIT %~dp0y.txt,$1,%%List1%% >>%~dp0custom.wcs
echo KILL \%Windows1% >>%~dp0custom.wcs
echo _END >>%~dp0custom.wcs
pecmd load %~dp0custom.wcs
goto:eof


:check
for /f "tokens=1-4 delims= " %%i in ('dir %tmpVol% ^|find /i "可用字节"') do (
set space=%%k
)
set space=!space:,=!
if !space! lss 450000000 (set judge=err) else set judge=ok
goto:eof



:InstPE
if not exist %LastVol%\BOOT md %LastVol%\BOOT
copy /y %~dp0*.wim %LastVol%\BOOT\
copy /y %~dp0BOOT.SDI %LastVol%\BOOT\
del %~dp0*.wim
bcdedit.exe /timeout 9
bcdedit.exe /set {current} bootmenupolicy Legacy
set id1={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffa}
set id2={%time:~6,2%%time:~9,2%ffff-8d96-11de-8e71-fffffffffffb}
bcdedit /create %id2% /d "Windows 10 PE 维护平台" /device
bcdedit /set %id2% ramdisksdidevice partition=%LastVol%
bcdedit /set %id2% ramdisksdipath \boot\boot.sdi
bcdedit /create %id1% /d "Windows 10 PE 维护平台" /application osloader
bcdedit /set %id1% device ramdisk=[%LastVol%]\boot\1064.WIM,%id2%
bcdedit /set %id1% osdevice ramdisk=[%LastVol%]\boot\1064.WIM,%id2%
bcdedit /set %id1% path \windows\system32\boot\%winload%
bcdedit /set %id1% description "Windows 10 PE 维护平台"
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
attrib +r +h +s +a %LastVol%\BOOT
goto:eof


上一个代码在虚拟机里写的,没考虑多硬盘的情况,所以会出错。

现在的判断逻辑是:有esp分区且容量足够就提示安装到esp分区,选择否就跳出指定安装窗口,你可以自定义安装位置。如果esp分区容量不够,且在3秒内没有点击则自动安装到最后一个容量足够的分区。

感谢红毛和5大

特别说明,包里的是pecmd_cli版,不用这个版本,程序判断会出错


完整的附件: 安装pe到硬盘.7z (951.8 KB, 下载次数: 245)



作者: dxy796    时间: 2021-8-25 17:02
赞!!!!    很需要这样
作者: bobylinger04    时间: 2021-8-25 17:12
东西是不错哦,就是一点点问题,我的最后一个是虚拟硬盘,也不想安装到c盘,能不能自定义啊
作者: wjgyz740526    时间: 2021-8-25 17:24
bobylinger04 发表于 2021-8-25 17:12
东西是不错哦,就是一点点问题,我的最后一个是虚拟硬盘,也不想安装到c盘,能不能自定义啊

你在cmd运行drvtype看看他列出来几个分区,有没有这个分区
作者: bobylinger04    时间: 2021-8-25 17:41
本帖最后由 bobylinger04 于 2021-8-25 17:43 编辑
wjgyz740526 发表于 2021-8-25 17:24
你在cmd运行drvtype看看他列出来几个分区,有没有这个分区

dos命令基本上不懂,还是不要理我了,dos不懂、代码不懂,要让我明白,基本上就是exe文件直接运行
作者: wjgyz740526    时间: 2021-8-25 17:57
bobylinger04 发表于 2021-8-25 17:41
dos命令基本上不懂,还是不要理我了,dos不懂、代码不懂,要让我明白,基本上就是exe文件直接运 ...

刚我试了下,至少VHD的虚拟磁盘是列出来了,看来你这个情况不适用,或者要换判断方法
作者: 邱晓燃    时间: 2021-8-25 18:11
怎么又不可以下载啊
作者: mrzhonghb    时间: 2021-8-25 18:12
感谢分享,试了一下,最后一个盘符是U盘,会出错。
作者: wjgyz740526    时间: 2021-8-25 18:26
mrzhonghb 发表于 2021-8-25 18:12
感谢分享,试了一下,最后一个盘符是U盘,会出错。

回头我换个判断方法吧
作者: mimi820    时间: 2021-8-25 19:02
是不是软件比批处理效果更好些呢
作者: yuhen    时间: 2021-8-25 19:13
谢谢楼主分享,我说下我的看法哈,很多PC都是双硬盘的,后面一个盘一般都是机械盘,速度慢。而且双盘也容易造成判断错误的BUG。不如改为如果ESP分区空间够就放ESP区,其他情况就直接放在D盘就好。PE维护起来也容易。如果放在系统盘里,因为很多用户系统装好后就会做一个系统的备份,这样PE维护起来就比较麻烦了。



作者: mrzhonghb    时间: 2021-8-25 19:25
本帖最后由 mrzhonghb 于 2021-8-25 19:28 编辑
wjgyz740526 发表于 2021-8-25 18:26
回头我换个判断方法吧

谢谢,另外,我拔掉U盘试了一下。
1,ESP分区的空间足够,可是并没有安装到ESP分区,而是安装到D盘了。
2,D盘其实不是最后的分区,D盘只是固态硬盘的最后一个分区,但是还有个机械硬盘,是E和F分区被无视了。当然了,正如楼上所说,安装到D盘其实更好。
作者: wjgyz740526    时间: 2021-8-25 21:52
mrzhonghb 发表于 2021-8-25 19:25
谢谢,另外,我拔掉U盘试了一下。
1,ESP分区的空间足够,可是并没有安装到ESP分区,而是安装到D盘了 ...

1.ESP分区足够没有安装到ESP?是不是你忘了改批处理中的判断可用空间大小?
2.固定安装到D盘代码更简单
3.SSD和HD混合的分区判断最后一个分区好像没什么特别精准的办法,看论坛里的盘符整理程序就知道,我个人更喜欢最后一个分区,安装pe,做备份,隐藏
作者: mrzhonghb    时间: 2021-8-25 22:39
wjgyz740526 发表于 2021-8-25 21:52
1.ESP分区足够没有安装到ESP?是不是你忘了改批处理中的判断可用空间大小?
2.固定安装到D盘代码更简单
...

哦,之前ESP分区是隐藏的,就安装到D盘了,把ESP分区显示出来,就安装到ESP分区了。
作者: hjj888    时间: 2021-8-25 23:35
谢谢楼主,感觉这个很好的。
作者: dfw9    时间: 2021-8-26 00:01
重装系统,会感到“不”干净。
作者: wjgyz740526    时间: 2021-8-26 05:17
mrzhonghb 发表于 2021-8-25 22:39
哦,之前ESP分区是隐藏的,就安装到D盘了,把ESP分区显示出来,就安装到ESP分区了。

代码里我把pecmd放到windoes目录了,所以没能显示
作者: wjgyz740526    时间: 2021-8-26 05:18
dfw9 发表于 2021-8-26 00:01
重装系统,会感到“不”干净。

啥意思?
作者: lily9718    时间: 2021-8-26 06:34
谢谢分享
作者: pan_cc    时间: 2021-8-26 08:07
谢谢楼主分享
作者: szwp    时间: 2021-8-26 08:14
楼主不妨将bcdedit /set %id1% path \windows\system32\boot\%winload%注释掉试试。
作者: zpwz    时间: 2021-8-26 08:22
学习学习了
作者: bobylinger04    时间: 2021-8-26 08:23
我昨天点那个安装文件了,没有安装成功,结果今天启动发行启动菜单变成传统的了,而且win10正常显示,而两个pe变成一样的英文了,有办法变回原来的非传统启动菜单吗,操作系统19042.331
作者: bobylinger04    时间: 2021-8-26 08:24
wjgyz740526 发表于 2021-8-25 17:24
你在cmd运行drvtype看看他列出来几个分区,有没有这个分区


我昨天点那个安装文件了,没有安装成功,结果今天启动发行启动菜单变成传统的了,而且win10正常显示,而两个pe变成一样的英文了,有办法变回原来的非传统启动菜单吗,操作系统19042.331
作者: smalldimple    时间: 2021-8-26 09:01
这个办法好!以前都是用wePE

作者: wjgyz740526    时间: 2021-8-26 12:39
bobylinger04 发表于 2021-8-26 08:23
我昨天点那个安装文件了,没有安装成功,结果今天启动发行启动菜单变成传统的了,而且win10正常显示,而两 ...

bcdedit /set {current} bootmenupolicy standard
作者: 进士小站    时间: 2021-8-26 14:19
yuhen 发表于 2021-8-25 19:13
谢谢楼主分享,我说下我的看法哈,很多PC都是双硬盘的,后面一个盘一般都是机械盘,速度慢。而且双盘也容易 ...

如果ESP分区空间够就放ESP区
这个想法好
作者: dfw9    时间: 2021-8-26 14:31
wjgyz740526 发表于 2021-8-26 05:18
啥意思?

PE在非系统盘,系统重新安装后,PE任然在非系统盘中,如果是绿色倒也罢了,接着启用;如果不能启,躺在盘中,然就是俗称的不干净。
作者: wjgyz740526    时间: 2021-8-26 14:33
dfw9 发表于 2021-8-26 14:31
PE在非系统盘,系统重新安装后,PE任然在非系统盘中,如果是绿色倒也罢了,接着启用;如果不能启,躺在盘 ...

如果放到系统盘,重做系统就干掉了,除了放到ESP分区,没别的好办法
作者: wjgyz740526    时间: 2021-8-26 14:34
szwp 发表于 2021-8-26 08:14
楼主不妨将bcdedit /set %id1% path \windows\system32\boot\%winload%注释掉试试。





作者: szwp    时间: 2021-8-26 15:09
wjgyz740526 发表于 2021-8-26 14:34

试启动
作者: wjgyz740526    时间: 2021-8-26 15:12
szwp 发表于 2021-8-26 15:09
试启动

空白的也能启动?我直接删掉了
作者: szwp    时间: 2021-8-26 15:18
wjgyz740526 发表于 2021-8-26 15:12
空白的也能启动?我直接删掉了

不能启动的话,报错误代码。
作者: wjgyz740526    时间: 2021-8-26 17:25
szwp 发表于 2021-8-26 15:18
不能启动的话,报错误代码。

居然真的能引导出乎意料
作者: szwp    时间: 2021-8-26 18:02
Legacy+Uefi都测下
作者: Allreal    时间: 2021-8-28 17:37
谢谢啊啊啊。  ^^
作者: wjgyz740526    时间: 2021-9-14 11:34
szwp 发表于 2021-8-26 18:02
Legacy+Uefi都测下

注释掉之后,uefi和Legacy都能启动

抱歉,回复的太迟,主要是上次那个版本的pe安装脚本有问题没考虑多硬盘的情况
作者: szwp    时间: 2021-9-14 11:54
wjgyz740526 发表于 2021-9-14 11:34
注释掉之后,uefi和Legacy都能启动

抱歉,回复的太迟,主要是上次那个版本的pe安装脚本有问 ...

有时考虑太多,更容易出问题,有些活让系统去干比较好,系统了解的事情更多些。有空可看下俺发的贴,不挂载更新ESP区,或可参考一二。
作者: gmy    时间: 2021-9-22 14:26
顶一下,点赞。
作者: lforl    时间: 2021-12-6 22:43
一键程序搞的话,的确不容易,感觉还是复制两个文件+工具加入启动菜单,简单直观一点,不难http://bbs.wuyou.net/forum.php?mod=viewthread&tid=428085
作者: ximcn    时间: 2022-3-13 13:20
感谢,正需要这个。
作者: 云上    时间: 2022-5-28 19:32
下来看看支持




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3