|
本帖最后由 2011htpcfans 于 2013-10-22 08:56 编辑
UEFI+GPT手动安装Win8.1,Win8和Win7不求人
UEFI+GPT手动安装Win8.1,Win8和Win7,看上去很麻烦,其实与BIOS+MBR没什么两样,主体思路还是第一步分区
(或者不需要),第二步Imagex应用基本操作,第三步引导建立或者说修复。
1、预备工作:
(1)强烈建议在哪个盘根目录建Backup文件夹,wim文件和批处理都放在这里,建子目录common,放BcdBoot等
公共程序,一般在涉及分区时,U盘根目录下建Backup文件夹最好。
(2)强烈建议准备比较好的Win8或者Win7 X64 PE,需要它支持DiskPart命令。
2、DiskPart分区与vhd辅助小工具
说明见论坛综合区!
3、Imagex应用与捕获基本操作小工具简要说明
(1)该批处理专门用于手动安装Win8.1,Win8和Win7时应用映像和捕获映像。UEFI+GPT可以,BIOS+MBR也可以。
(2)运行环境,在现有Win8.1,Win8和Win7系统或者在PE下安装、捕获全新或第二系统,包括vhd方式的第二系统。
(3)子目录common,包含64和32位版本的Imagex,牵扯全新或者第二系统,安装目标盘或备份盘需手工指定!
(4)32位PE效能明显较慢,全新安装需PE环境,第二系统根本不需要PE环境。
(5)安装源wim文件在批处理同目录,还是建议有Backup文件夹。
(6)批处理功能比常见安装器简陋好多。
4、UEFI_GPT引导修复重建小工具简要说明
(1)该批处理专门用于UEFI+GPT安装Win8.1,Win8和Win7时手动修复重建引导。
(2)运行环境,在现有Win8.1,Win8和Win7系统或者在PE下为全新或第二系统修复重建引导,包括vhd方式的第二系统。
但PE必须支持DiskPart命令。另外,因为用到了BcdBoot命令,放在本批处理同级目录子目录common。
(3)建议在哪个盘根目录建Backup文件夹,wim文件和批处理都放在这里,建子目录common,放BcdBoot等。
一般在设计分区时,U盘根目录下建Backup文件夹最好。
(4)UEFI_GPT引导修复重建思路:执行DiskPart命令,显示ESP分区,记下盘符,看好系统盘符,执行BcdBoot。
可能执行不止一次引导修复重建,再次执行时不再检测ESP分区盘符。
5、Backup文件夹文件示例
file://E:\Backup (1 folders, 10 files, 5.18 GB, 5.18 GB in total.)
│ DiskPart分区与vhd.bat 10.12 KB
│ Imagex应用与捕获基本操作.bat 9.25 KB
│ UEFI_GPT引导修复重建.bat 1.87 KB
│ Win7_PR_X86_VL_P_D_Office2013.wim 3.66 GB
│ Win81_PR_X64_VL_Office2013.wim 4.46 MB
│ XP_General_MRX3F_47B9T_2487J_KWKMF_RPWBY.wim 1.39 GB
│ 全自动Win8_7_XP系统Wim_Gho安装与备份_个人版.bat 15.19 KB
│ 全自动Win8_7_XP系统Wim_Gho安装与备份_兼容版.bat 15.97 KB
│ 全自动Win8_7系统补丁驱动封装批处理.bat 10.22 KB
│ 系统wim映像整理.bat 8.42 KB
└─Common (0 folders, 6 files, 1.77 MB, 1.77 MB in total.)
bcdboot-x86.exe 143.50 KB
bcdboot.exe 161.50 KB
bootsect-X86.exe 108.23 KB
bootsect.exe 110.00 KB
imagex-x86.exe 589.50 KB
imagex.exe 697.00 KB
6、Imagex应用与捕获基本操作小工具源码
@echo off&mode con lines=25 cols=90
title ImageX基本操作_马宝银倾力提供
color 0a
setlocal enabledelayedexpansion
echo.
@echo ------------------------------------------------------------------------------
rd %systemdrive%\users\Dir_Test>nul 2>nul
md %systemdrive%\users\Dir_Test>nul 2>nul||(Echo 请使用右键管理员身份运行&&Pause >nul&&Exit)
rd %systemdrive%\users\Dir_Test>nul 2>nul
cls
echo 任务开始时间是%time:~,2%点%time:~3,2%分%time:~6,2%秒
set /a Tday=0
set "T1=%time%"
@echo 第一阶段,准备工作。
icacls %~dp0\common /remove:d administrator /t >null
echo -----------------------------------------------------
echo -----------------------------------------------------
echo 任务类型^<1^>:将Wim文件中的映像应用于某一分区,即装系统。
echo 任务类型^<2^>:将某一分区系统捕获为系统映像文件,即wim文件。
echo -----------------------------------------------------
echo 注意:要整理的Wim文件与本批处理同目录。
echo 注意:凡涉及输入名字的,请不要输入带空格、。,:~《》%¥##等千奇百怪的字符。
echo 注意:输入数字字母较多,请现在改系统输入法为英文,误操作,请按Ctrl+C退出。
echo 注意:本批处理要求同级目录下有个子目录common,放了Imagex等必备程序。
echo 注意:这命名也有一定要求。
echo -----------------------------------------------------
::检查Imagex系统映像文件是否存在,名称是否一致。
:noImagex
if exist %~dp0\Common\imagex.exe goto existImagex
echo 兄弟,请正确复制imagex吧,OK了,再按任意键继续。
pause
if not exist %~dp0\Common\imagex.exe goto noImagex
if exist %~dp0\Common\imagex-x86.exe goto existImagex
echo 兄弟,请正确复制imagex-x86吧,OK了,再按任意键继续。
pause
if not exist %~dp0\Common\imagex-x86.exe goto noImagex
:existImagex
::准备系统恢复临时文件存储区 \tmp_Imagex
if not exist %~dp0\tmp_Imagex goto md
:rd_Prepare
dir %~dp0\tmp_Imagex /ad /b /s >%~dp0\del_rd.txt
for /f "usebackq delims=" %%i in (%~dp0\del_rd.txt) do ((takeown /f "%%i" /r /d y >%~dp0\del_log.txt)&(@echo y|icacls "%%i" /t /q /grant system:f )&(rd "%%i" /s /q))
takeown /f %~dp0\tmp_Imagex /r /d y >%~dp0\del_rd.txt
@echo y|icacls %~dp0\tmp_Imagex /t /q /grant system:f
rd %~dp0\tmp_Imagex /s /q
if exist %~dp0\tmp_Imagex goto rd_Prepare
del /f /s /q %~dp0\del_rd.txt
:md
md %~dp0\tmp_Imagex
::WinPE是64位时,性能快,确保,输入小写y,不是,随便输个!
set /p verSys=系统或者WinPE是64位的吗?是,输入y,不是或不清楚,随便输个----
echo -----------------------------------------------------
echo -----------------------------------------------------
:opInput
cls
echo ╔┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╗
echo ┋ 程序功能选择
echo ┋ ┋
echo ┋ 任务类型 1: 将Wim文件中的映像应用于某一分区,即装系统。 ┋
echo ┋ ┋
echo ┋ 任务类型 2: 将某一分区系统捕获为系统映像文件,即wim文件。 ┋
echo ┋ ┋
echo ┋ 纯属意外 3: 我是来打酱油的,直接退出 ┋
echo ╚┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╝
echo ------------------------------------------------------------------------------
set /p op=请输入工作任务类型:1-3----
for /l %%i in (1,1,3) do (
if !op!==%%i (
goto ValidInput)
)
echo 这么简单的选择题都会错,输入数字1-3有这么难吗,请重新输入
echo ------------------------------------------------------------------------------
goto opInput
:ValidInput
if !op!==3 exit
if !op!==1 (
set fileSourceWim=0
set /a CountIndex=0
set /a a=0
::查找Backup目录中所有映像文件
dir %~dp0\*.wim /b /s >%~dp0\tmp_Imagex\fbackup.txt
@echo 查找到%~dp0目录下所有映像文件如下表
@echo -----------------------------------------------------
for /f "usebackq delims=" %%i in (%~dp0\tmp_Imagex\fbackup.txt) do (
set /a a+=1
echo 系统映像:!a! %%i)
if !a!==0 (
echo 无系统映像文件,直接退出
pause
goto End)
@echo -----------------------------------------------------
:SourceWimInput
set /p SourceWim=请输入要安装系统Wim文件序号,只有序号有效,输完请按回车----
for /l %%i in (1,1,!a!) do (
if !SourceWim!==%%i (
goto ValidSourceInput)
)
echo 这么简单的选择题都会错,输入数字1-!a!有这么难吗,请重新输入
echo -----------------------------------------------------
goto SourceWimInput
:ValidSourceInput
@echo 你选择的是第!SourceWim!个系统映像文件,马上下一步
set /a a=0
for /f "usebackq delims=" %%i in (%~dp0\tmp_Imagex\fbackup.txt) do (
set /a a+=1
if !a!==!SourceWim! (
set fileSourceWim=%%i
echo 你选择的系统映像文件是:!fileSourceWim!
echo -----------------------------------------------------
goto ReadySourceWim)
)
:ReadySourceWim
%~dp0\Common\imagex-x86 /info !fileSourceWim! >%~dp0\tmp_Imagex\ImageInfo.txt
find "Image Count" %~dp0\tmp_Imagex\ImageInfo.txt >%~dp0\tmp_Imagex\Num.txt
for /f "tokens=3 skip=2 delims= " %%i in (%~dp0\tmp_Imagex\Num.txt) do (
set /a CountIndex=%%i
echo 注意:该映像文件**有!CountIndex!个系统映像,请正确选择索引号
)
echo -----------------------------------------------------
find /i "<NAME>" %~dp0\tmp_Imagex\ImageInfo.txt >%~dp0\tmp_Imagex\Num.txt
for /f "skip=2 delims=" %%i in (%~dp0\tmp_Imagex\Num.txt) do (
set /a IndexTmp+=1
echo 索引!IndexTmp!:%%i)
echo -----------------------------------------------------
echo 1、下面要输入导出映像的索引号,可向上滚动显示刚才映像文件信息。
echo 2、只有数字有效,第一个映像索引是1,依次类推。
:SourceIndexInput
set /p Index=3、请输入要导出系统映像的索引号----
echo -----------------------------------------------------
for /l %%i in (1,1,!CountIndex!) do (
if !Index!==%%i (
goto ValidIndexInput)
)
echo 这么简单的选择题都会错,输入数字1-!CountIndex!有这么难吗,请重新输入
echo -----------------------------------------------------
goto SourceIndexInput
:ValidIndexInput
set /a IndexTmp=0
for /f "skip=2 delims=" %%i in (%~dp0\tmp_Imagex\Num.txt) do (
set /a IndexTmp+=1
if !IndexTmp!==!Index! (
set NameDest=%%i
set NameDest=!NameDest:~10,-9!
echo 你输入的索引号是!Index!,映像名字是!NameDest!
goto ReadyNameDest )
)
:ReadyNameDest
:PartDestInput
echo -----------------------------------------------------
set /p PartDest=请输入要安装系统的分区盘符,要格式化,请慎重输入!
if not exist !PartDest!: (
echo 你输入的盘符是什么东西,根本不存在吗!请重新输入!
goto PartDestInput
)
vol !PartDest!:
echo 格式化!PartDest!盘,请核对分区卷标对否,慎重,别破坏数据。按任意键继续。
pause
format !PartDest!: /q /x /u /y /fs:ntfs /a:4096 /v:WSYS
if !verSys! == y (
echo -----------------------------------------------------
echo 64位系统,如果你确认本机PE不是64位,请中止批处理
%~dp0\Common\imagex /apply !fileSourceWim! !Index! !PartDest!: /temp %~dp0\tmp_Imagex
goto End )
@echo -----------------------------------------------------
echo 32位系统
%~dp0\Common\imagex-x86 /apply !fileSourceWim! !Index! !PartDest!: /temp %~dp0\tmp_Imagex
goto End
)
if !op!==2 (
:PartSourceInput
echo -----------------------------------------------------
set /p PartSource=请输入要制作映像那个盘的盘符,不要输冒号!---
if not exist !PartSource!: (
echo 你输入的盘符是什么东西,根本不存在吗!请重新输入!
goto PartSourceInput
)
vol !PartSource!:
set /p NameCapture=请输入要制作成的映像名字,不需路径,不需后缀名,如Win8_PR_X64_VL---
if !verSys! == y (
echo -----------------------------------------------------
echo 64位系统,如果你确认本机PE不是64位,请中止批处理
%~dp0\common\imagex /capture /compress maximum !PartSource!: %~dp0\!NameCapture!.wim "!NameCapture!" /temp %~dp0\tmp_Imagex
goto End )
@echo -----------------------------------------------------
echo 32位系统
%~dp0\common\imagex-x86 /capture /compress maximum !PartSource!: %~dp0\!NameCapture!.wim "!NameCapture!" /temp %~dp0\tmp_Imagex
)
)
:End
dir %~dp0\tmp_Imagex /ad /b /s >%~dp0\del_rd.txt
for /f "usebackq delims=" %%i in (%~dp0\del_rd.txt) do ((takeown /f "%%i" /r /d y >%~dp0\del_log.txt)&(@echo y|icacls "%%i" /t /q /grant system:f )&(rd "%%i" /s /q))
takeown /f %~dp0\tmp_Imagex /r /d y >%~dp0\del_rd.txt
@echo y|icacls %~dp0\tmp_Imagex /t /q /grant system:f
rd %~dp0\tmp_Imagex /s /q
icacls %~dp0\common /deny administrator:d /t >null
del /f /s /q %~dp0\del_log.txt
del /f /s /q %~dp0\null
del /f /s /q %~dp0\del_rd.txt
echo 任务结束时间是%time:~,2%点%time:~3,2%分%time:~6,2%秒
set "T2=%time%"
if "%T2:~,2%" lss "%T1:~,2%" (set Tday+=8640000)
set /a "T_d=%Tday%+(%T2:~,2%*360000)+(%T2:~3,1%*60000+%T2:~4,1%*6000)+(%T2:~6,1%*1000+%T2:~7,1%*100)+(%T2:~9,1%*10+%T2:~-1%)-(%T1:~,2%*360000)-(%T1:~3,1%*60000+%T1:~4,1%*6000)-(%T1:~6,1%*1000+%T1:~7,1%*100)-(%T1:~9,1%*10+%T1:~-1%)"
set /a "ss=%T_d%/100%%60"
set /a "mm=%T_d%/6000%%60"
set /a "hh=%T_d%/360000%%1"
set /a "ms=%T_d%%%100"
echo 本次任务消耗时间为 %hh%:%mm%:%ss%.%ms%秒
pause
7、UEFI_GPT引导修复重建小工具源码
@echo off&mode con lines=25 cols=90
color 0a
setlocal enabledelayedexpansion
@echo ------------------------------------------------------------------------------
rd %systemdrive%\users\Dir_Test>nul 2>nul
md %systemdrive%\users\Dir_Test>nul 2>nul||(Echo 请使用右键管理员身份运行&&Pause >nul&&Exit)
rd %systemdrive%\users\Dir_Test>nul 2>nul
cls
title UEFI_GPT引导修复重建_马宝银提供
cls
echo.
@echo ------------------------------------------------------------------------------
@echo 程序运行环境:Win8/7,或者Win8/7的PE,但需支持DiskPart,管理员身份
@echo 程序主要功能:UEFI_GPT引导修复重建
@echo ------------------------------------------------------------------------------
echo.
set validLabel=0
:AssignLabel
cls
echo list vol>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
echo ------------------------------------------------------------------------------
if !validLabel!==1 goto validLabelESP
set /p bLabelHave=请问ESP分区是否已经有盘符,是y,不n---
if !bLabelHave!==y (
set /p Label_ESP=请输入ESP分区现在的盘符,我不检测无效盘符噢---
set validLabel=1
goto validLabelESP
)
set /p choiceVol_6=请输入ESP分区的卷编号,如果ESP分区已有盘符,直接回车---
set /p Label_ESP=请输入盘符,我不检测无效盘符噢---
echo select vol !choiceVol_6!>%~dp0\DiskPart.txt
echo assign letter=!Label_ESP!>>%~dp0\DiskPart.txt
set validLabel=1
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
echo ------------------------------------------------------------------------------
:validLabelESP
set /p Label_SYS=搞完ESP分区,请输入系统盘符,我不检测无效盘符噢---
%~dp0\common\bcdboot !Label_SYS!:\windows /s !Label_ESP!: /f ALL
set /p bProceedA=请问是否继续修复重建其它系统的引导项,是y,不n---
if !bProceedA!==y goto AssignLabel
del /f /s /q %~dp0\DiskPart.txt
echo 任务结束! Congratulations!
pause
|
评分
-
查看全部评分
|