无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7573|回复: 41
打印 上一主题 下一主题

[分享] 重新修改了下安装pe到本地硬盘的批处理

    [复制链接]
跳转到指定楼层
1#
发表于 2021-8-25 16:59:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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)


评分

参与人数 4无忧币 +20 收起 理由
wh07027 + 5 很给力!
amita + 5 很给力!
纯脆entropy + 5 赞一个!
qq2348227 + 5 很给力!

查看全部评分

2#
发表于 2021-8-25 17:02:59 | 只看该作者
赞!!!!    很需要这样
回复

使用道具 举报

3#
发表于 2021-8-25 17:12:34 | 只看该作者
东西是不错哦,就是一点点问题,我的最后一个是虚拟硬盘,也不想安装到c盘,能不能自定义啊
回复

使用道具 举报

4#
 楼主| 发表于 2021-8-25 17:24:28 | 只看该作者
bobylinger04 发表于 2021-8-25 17:12
东西是不错哦,就是一点点问题,我的最后一个是虚拟硬盘,也不想安装到c盘,能不能自定义啊

你在cmd运行drvtype看看他列出来几个分区,有没有这个分区
回复

使用道具 举报

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

dos命令基本上不懂,还是不要理我了,dos不懂、代码不懂,要让我明白,基本上就是exe文件直接运行
回复

使用道具 举报

6#
 楼主| 发表于 2021-8-25 17:57:02 | 只看该作者
bobylinger04 发表于 2021-8-25 17:41
dos命令基本上不懂,还是不要理我了,dos不懂、代码不懂,要让我明白,基本上就是exe文件直接运 ...

刚我试了下,至少VHD的虚拟磁盘是列出来了,看来你这个情况不适用,或者要换判断方法
回复

使用道具 举报

7#
发表于 2021-8-25 18:11:45 | 只看该作者
怎么又不可以下载啊
回复

使用道具 举报

8#
发表于 2021-8-25 18:12:57 | 只看该作者
感谢分享,试了一下,最后一个盘符是U盘,会出错。
回复

使用道具 举报

9#
 楼主| 发表于 2021-8-25 18:26:59 来自手机 | 只看该作者
mrzhonghb 发表于 2021-8-25 18:12
感谢分享,试了一下,最后一个盘符是U盘,会出错。

回头我换个判断方法吧
回复

使用道具 举报

10#
发表于 2021-8-25 19:02:58 | 只看该作者
是不是软件比批处理效果更好些呢
回复

使用道具 举报

11#
发表于 2021-8-25 19:13:50 | 只看该作者
谢谢楼主分享,我说下我的看法哈,很多PC都是双硬盘的,后面一个盘一般都是机械盘,速度慢。而且双盘也容易造成判断错误的BUG。不如改为如果ESP分区空间够就放ESP区,其他情况就直接放在D盘就好。PE维护起来也容易。如果放在系统盘里,因为很多用户系统装好后就会做一个系统的备份,这样PE维护起来就比较麻烦了。


回复

使用道具 举报

12#
发表于 2021-8-25 19:25:33 | 只看该作者
本帖最后由 mrzhonghb 于 2021-8-25 19:28 编辑
wjgyz740526 发表于 2021-8-25 18:26
回头我换个判断方法吧

谢谢,另外,我拔掉U盘试了一下。
1,ESP分区的空间足够,可是并没有安装到ESP分区,而是安装到D盘了。
2,D盘其实不是最后的分区,D盘只是固态硬盘的最后一个分区,但是还有个机械硬盘,是E和F分区被无视了。当然了,正如楼上所说,安装到D盘其实更好。
回复

使用道具 举报

13#
 楼主| 发表于 2021-8-25 21:52:41 来自手机 | 只看该作者
mrzhonghb 发表于 2021-8-25 19:25
谢谢,另外,我拔掉U盘试了一下。
1,ESP分区的空间足够,可是并没有安装到ESP分区,而是安装到D盘了 ...

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

使用道具 举报

14#
发表于 2021-8-25 22:39:41 | 只看该作者
wjgyz740526 发表于 2021-8-25 21:52
1.ESP分区足够没有安装到ESP?是不是你忘了改批处理中的判断可用空间大小?
2.固定安装到D盘代码更简单
...

哦,之前ESP分区是隐藏的,就安装到D盘了,把ESP分区显示出来,就安装到ESP分区了。

点评

代码里我把pecmd放到windoes目录了,所以没能显示  详情 回复 发表于 2021-8-26 05:17
回复

使用道具 举报

15#
发表于 2021-8-25 23:35:44 | 只看该作者
谢谢楼主,感觉这个很好的。
回复

使用道具 举报

16#
发表于 2021-8-26 00:01:20 | 只看该作者
重装系统,会感到“不”干净。

点评

啥意思?  详情 回复 发表于 2021-8-26 05:18
回复

使用道具 举报

17#
 楼主| 发表于 2021-8-26 05:17:03 来自手机 | 只看该作者
mrzhonghb 发表于 2021-8-25 22:39
哦,之前ESP分区是隐藏的,就安装到D盘了,把ESP分区显示出来,就安装到ESP分区了。

代码里我把pecmd放到windoes目录了,所以没能显示
回复

使用道具 举报

18#
 楼主| 发表于 2021-8-26 05:18:06 来自手机 | 只看该作者
dfw9 发表于 2021-8-26 00:01
重装系统,会感到“不”干净。

啥意思?

点评

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

使用道具 举报

19#
发表于 2021-8-26 06:34:43 | 只看该作者
谢谢分享
回复

使用道具 举报

20#
发表于 2021-8-26 08:07:24 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

21#
发表于 2021-8-26 08:14:46 | 只看该作者
楼主不妨将bcdedit /set %id1% path \windows\system32\boot\%winload%注释掉试试。

点评

[attachimg]485803[/attachimg] [attachimg]485804[/attachimg]  详情 回复 发表于 2021-8-26 14:34
回复

使用道具 举报

22#
发表于 2021-8-26 08:22:19 来自手机 | 只看该作者
学习学习了
回复

使用道具 举报

23#
发表于 2021-8-26 08:23:39 | 只看该作者
我昨天点那个安装文件了,没有安装成功,结果今天启动发行启动菜单变成传统的了,而且win10正常显示,而两个pe变成一样的英文了,有办法变回原来的非传统启动菜单吗,操作系统19042.331

点评

bcdedit /set {current} bootmenupolicy standard  详情 回复 发表于 2021-8-26 12:39
回复

使用道具 举报

24#
发表于 2021-8-26 08:24:17 | 只看该作者
wjgyz740526 发表于 2021-8-25 17:24
你在cmd运行drvtype看看他列出来几个分区,有没有这个分区


我昨天点那个安装文件了,没有安装成功,结果今天启动发行启动菜单变成传统的了,而且win10正常显示,而两个pe变成一样的英文了,有办法变回原来的非传统启动菜单吗,操作系统19042.331
回复

使用道具 举报

25#
发表于 2021-8-26 09:01:42 | 只看该作者
这个办法好!以前都是用wePE
回复

使用道具 举报

26#
 楼主| 发表于 2021-8-26 12:39:42 来自手机 | 只看该作者
bobylinger04 发表于 2021-8-26 08:23
我昨天点那个安装文件了,没有安装成功,结果今天启动发行启动菜单变成传统的了,而且win10正常显示,而两 ...

bcdedit /set {current} bootmenupolicy standard
回复

使用道具 举报

27#
发表于 2021-8-26 14:19:27 | 只看该作者
yuhen 发表于 2021-8-25 19:13
谢谢楼主分享,我说下我的看法哈,很多PC都是双硬盘的,后面一个盘一般都是机械盘,速度慢。而且双盘也容易 ...

如果ESP分区空间够就放ESP区
这个想法好
回复

使用道具 举报

28#
发表于 2021-8-26 14:31:33 | 只看该作者

PE在非系统盘,系统重新安装后,PE任然在非系统盘中,如果是绿色倒也罢了,接着启用;如果不能启,躺在盘中,然就是俗称的不干净。

点评

如果放到系统盘,重做系统就干掉了,除了放到ESP分区,没别的好办法  详情 回复 发表于 2021-8-26 14:33
回复

使用道具 举报

29#
 楼主| 发表于 2021-8-26 14:33:30 | 只看该作者
dfw9 发表于 2021-8-26 14:31
PE在非系统盘,系统重新安装后,PE任然在非系统盘中,如果是绿色倒也罢了,接着启用;如果不能启,躺在盘 ...

如果放到系统盘,重做系统就干掉了,除了放到ESP分区,没别的好办法
回复

使用道具 举报

30#
 楼主| 发表于 2021-8-26 14:34:26 | 只看该作者
szwp 发表于 2021-8-26 08:14
楼主不妨将bcdedit /set %id1% path \windows\system32\boot\%winload%注释掉试试。




点评

试启动  详情 回复 发表于 2021-8-26 15:09
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-29 11:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表