|
好东东是干什么用的 ?… |
| 虽然看不懂,但觉得好像很厉害的样子 |
| 非常好的东西!!收藏了 |
|
好东东,支持一下 |
| 学习了。 |
| 非常好的东西!!收藏了 |
| 虽然看不懂,但觉得好像很厉害的样子 |
| 谢谢楼主的分享! |
|
不错哦,真的很好,支持一下。 需要用几次来熟悉下 |
| 楼主很厉害。 |
| 楼主把你的这个也发一个word文档,来个图文说明就好了。 |
| 天神一样的楼主 太精彩了 最简单的命令行完成 超级难度的任务 谢谢分享 |
| 2011htpcfans,做的不错,很给力,再接再厉 |
| 更新得还挺快的(^.^) |
| 好东东,支持一下 |
| 好东西必须顶你吖(^.^) |
| 看起来很厉害 下次一定试一下 |
|
接着1楼 if !OpChoice!==11 ( echo list disk>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt set /a CountDisk=0 set /a CountPart=0 set NumDisk=0 set bVldNum=n set NumVol=0 set /a a=0 set /a CountWim=0 set /a NumWimSource=0 set /a NumDskG=0 set /a NumPart=0 set bBK=y echo list disk>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt>%temp%\Out_DiskPart.txt find /i "磁盘" %temp%\Out_DiskPart.txt>%temp%\Out_tmp.txt for /f "skip=2 tokens=2 delims= " %%i in (%temp%\Out_tmp.txt) do (set /a CountDisk=%%i) for /l %%i in (1,1,5) do ( if !bVldNum!==n (set /p NumDisk=请输入要安装或备份系统的目标磁盘编号,从0起编,默认第0块磁盘----) for /l %%j in (0,1,!CountDisk!) do ( if !NumDisk!==%%j set bVldNum=y ) ) if !bVldNum!==n (echo 磁盘编号5次都输错,算了退出吧!&&exit) ::Ghost认为磁盘从1开始起编! set /a NumDskG=!NumDisk!+1 set /p bBK=请问是进行备份吗,如恢复输入n,默认是备份y,直接回车---- echo select disk !NumDisk!>%temp%\DiskPart.txt echo list part>>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt ::准备指定安装或备份分区 set /p NumPart=你选择在磁盘^<!NumDisk!^>上安装或备份系统,请输入分区序号---- if !bBK!==y ( echo list vol>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt set bHvLabSr=n for /l %%i in (1,1,5) do ( if !bHvLabSr!==n ( set /p LabelSr=请输入系统备份gho文件的放置盘符,直接回车---- if not exist !LabelSr!: echo 你输入的盘符是什么东西,根本不存在吗? if exist !LabelSr!: set bHvLabSr=y ) ) if not exist !LabelSr!:\backup md !LabelSr!:\backup set NameBack=bk_Mby set /p NameBack=请输入要备份文件名字,默认名字bk_Mby,直接回车---- %~dp0ghost -clone,mode=pdump,src=!NumDskG!:!NumPart!,dst=!LabelSr!:\backup\!NameBack!.gho /z9 /sure goto End ) if not !bBK!==y ( echo list vol>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt ::指定要安装分区,请看卷标信息。 set bHvSYS=n for /l %%i in (1,1,5) do ( if !bHvSYS!==n ( set /p LabSYS=请输入要安装系统分区盘符,就是那个序号对应的盘符,然后回车---- if not exist !LabSYS!: echo 你输入的盘符是什么东西,根本不存在吗? if exist !LabSYS!: set bHvSYS=y ) ) ::指定EFI/MSR分区盘符,请看卷标信息。 set bHvSYS=n for /l %%i in (1,1,5) do ( if !bHvSYS!==n ( set /p Label_ESP=请输入EFI/MSR分区盘符,不带冒号,然后回车---- if not exist !Label_ESP!: echo 你输入的盘符是什么东西,根本不存在吗? if exist !Label_ESP!: set bHvSYS=y ) ) set bNdCpyFil=n set /p bNdCpyFil=请问需要从U盘复制gho文件吗,如需要输入y,默认不要n,直接回车---- if !bNdCpyFil!==y ( ::现在准备把系统备份gho文件复制到本地卷中,请看卷标信息。 ::指定系统备份gho文件文件本地磁盘放置分区。 set bHvLabSr=n for /l %%i in (1,1,5) do ( if !bHvLabSr!==n ( set /p LabelSr=请输入要放置系统备份gho文件的盘符,直接回车---- if not exist !LabelSr!: echo 你输入的盘符是什么东西,根本不存在吗? if exist !LabelSr!: set bHvLabSr=y ) ) if not exist !LabelSr!:\backup md !LabelSr!:\backup ::准备源系统备份gho文件与索引序号。 set bHvLSr=n for /l %%i in (1,1,5) do ( if !bHvLSr!==n ( set /p LPartU=请输入系统备份gho文件所在U盘盘符,不带冒号---- if not exist !LPartU!: echo 这个盘符根本就没有使用了,你不要搞笑好吧 if exist !LPartU!: set bHvLSr=y ) ) dir !LPartU!:\*.gho /b /s >%temp%\fSeek.txt echo 查找到!LPartU!分区下所有gho文件如下表 echo ----------------------------------------------------- set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1&&echo 系统备份:!a! %%i) set /a CountWim=!a! if !a!==0 echo 该分区无系统备份文件,退出重来吧!&&goto End set /p NumWimSource=请输入gho文件序号,我不检测无效序号,不带冒号---- set bVldNSr=n for /l %%i in (1,1,!CountWim!) do ( if !NumWimSource!==%%i set bVldNSr=y ) if !bVldNSr!==n echo 你没有输入有效gho文件序号,退出重来吧!&&goto End set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1 if !NumWimSource!==!a! copy %%i !LabelSr!:\backup\ ) echo gho文件已拷贝到本地磁盘,程序暂停,U盘可以拔出它用,然后继续。 pause dir !LabelSr!:\*.gho /b /s >%temp%\fSeek.txt echo 查找到!LabelSr!分区下所有gho文件如下表 echo ----------------------------------------------------- set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1&&echo 系统gho:!a! %%i) set /a CountWim=!a! set /p NumWimSource=请输入系统gho文件序号,我不检测无效序号,不带冒号---- set bVldNSr=n for /l %%i in (1,1,!CountWim!) do ( if !NumWimSource!==%%i set bVldNSr=y ) if !bVldNSr!==n echo 你没有输入有效系统gho文件序号,退出重来吧!&&goto End set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1 if !NumWimSource!==!a! ( %~dp0ghost -clone,mode=pload,src=%%i:1,dst=!NumDskG!:!NumPart! /sure ) ) ) if not !bNdCpyFil!==y ( set bHvLabSr=n for /l %%i in (1,1,5) do ( if !bHvLabSr!==n ( set /p LabelSr=请输入有系统备份gho文件的盘符,直接回车---- if not exist !LabelSr!: echo 你输入的盘符是什么东西,根本不存在吗? if exist !LabelSr!: set bHvLabSr=y ) ) dir !LabelSr!:\*.gho /b /s >%temp%\fSeek.txt echo 查找到!LabelSr!分区下所有gho文件如下表 echo ----------------------------------------------------- set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1&&echo 系统gho:!a! %%i) set /a CountWim=!a! set /p NumWimSource=请输入系统gho文件序号,我不检测无效序号,不带冒号---- set bVldNSr=n for /l %%i in (1,1,!CountWim!) do ( if !NumWimSource!==%%i set bVldNSr=y ) if !bVldNSr!==n echo 你没有输入有效系统gho文件序号,退出重来吧!&&goto End set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1 if !NumWimSource!==!a! ( %~dp0ghost -clone,mode=pload,src=%%i:1,dst=!NumDskG!:!NumPart! /sure ) ) ) if !bPart_GPT!==y %windir%\system32\bcdboot !LabSYS!:\windows /s !Label_ESP!: /f uefi /l zh-cn if not !bPart_GPT!==y ( if exist !LabSYS!:\ntldr %windir%\system32\bootsect.exe /nt52 !Label_ESP!: /force /mbr if not exist !LabSYS!:\ntldr %windir%\system32\bootsect.exe /nt60 !Label_ESP!: /force /mbr&&%windir%\system32\bcdboot !Label_SYS!:\windows /s !Label_ESP!: /f bios /l zh-cn ) ) goto End ) if !OpChoice!==12 ( set bVldNum=n set NumVol=0 set /a a=0 set NumSdi=1 set /a CountWim=0 set NumWimSource=1 set bHvFilePE=n echo ------------------------------------------------------------------------------ echo. echo 将PE安装在EFI分区或者MSR分区内,防止PE受损,没有这种分区你就老外了。 echo. echo ------------------------------------------------------------------------------ echo PE放于指定盘根目录下WinPE文件夹,设备文件Boot.sdi和启动文件Boot.wim也固定。 set bIsUEFI=y set /p bIsUEFI=请问BIOS是否UEFI,默认是,不是请输入小写n---- set bHvLab=n set /p bHvLab=采用MBR但无MSR,或者MBR中MSR分区/ESP分区如已有盘符,输入y,其余直接回车---- if !bHvLab!==y ( set /p LabelEFI=请输入ESP分区或MBR中MSR分区盘符或者MBR无MSR分区时的系统盘符---- ) if not !bHvLab!==y ( ::给EFI或者MSR分区分配盘符 set bHvSetESP=n for %%i in (z y x w v u t s r q p o n m) do ( if !bHvSetESP!==n ( if not exist %%i: set LabelEFI=%%i&&set bHvSetESP=y ) ) echo list vol>%temp%\DiskPart.txt echo exit>>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt set /p NumVolESP=请输入GPT中ESP分区或MBR中MSR分区的卷编号,直接回车---- echo select vol !NumVolESP!>%temp%\DiskPart.txt echo assign letter=!LabelEFI!>>%temp%\DiskPart.txt echo exit>>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt ) ::UEFI引导需要PE源盘安装硬盘PE,默认需要本PE源盘,MBR引导,默认也要 set bCopyPE=y set /p bCopyPE=请问是否需要复制PE文件,默认需要,不需要输入小写n---- if not !bCopyPE!==n ( set name_PE=PE_MBY set /p name_PE=默认安装PE于!LabelEFI!:\PE_MBY目录,也可输入目录名字,如PE_WYS---- if not exist !LabelEFI!:\!name_PE!\ md !LabelEFI!:\!name_PE!\ set name_PathSdi=!name_PE! set name_PathWim=!name_PE! set bHvLSr=n for /l %%i in (1,1,5) do ( if !bHvLSr!==n ( set /p LPartU=请输入PE源文件所在盘盘符,可以是本地硬盘,不带冒号---- if not exist !LPartU!: echo 这个盘符根本就没有使用了,你不要搞笑好吧 if exist !LPartU!: set bHvLSr=y ) ) echo. dir !LPartU!:\*.sdi /b /s >%temp%\fdSeek.txt echo 查找到!LPartU!分区下所有映像引导文件*.sdi如下表 echo ----------------------------------------------------- set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fdSeek.txt) do ( set /a a+=1&&echo 系统引导文件:!a! %%i) set /a CountWim=!a! if !a!==0 echo 该分区无PE系统映像引导文件,退出重来吧!&&goto End echo ----------------------------------------------------- set /p NumSdi=请输入系统映像引导文件序号,我不检测无效序号,默认1---- set bVldNSr=n for /l %%i in (1,1,!CountWim!) do ( if !NumSdi!==%%i set bVldNSr=y ) if !bVldNSr!==n echo 你没有输入有效PE系统映像文件序号,退出重来吧!&&goto End echo. dir !LPartU!:\*.wim /b /s >%temp%\fwSeek.txt echo 查找到!LPartU!分区下所有映像文件如下表 echo ----------------------------------------------------- set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fwSeek.txt) do ( set /a a+=1&&echo PE系统映像:!a! %%i) set /a CountWim=!a! if !a!==0 echo 该分区无PE系统映像文件,退出重来吧!&&goto End echo ----------------------------------------------------- set /p NumWimSource=请输入PE系统映像文件序号,我不检测无效序号,默认1---- set bVldNSr=n for /l %%i in (1,1,!CountWim!) do ( if !NumWimSource!==%%i set bVldNSr=y ) if !bVldNSr!==n echo 你没有输入有效PE系统映像文件序号,退出重来吧!&&goto End set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fdSeek.txt) do ( set /a a+=1 if !a!==!NumSdi! copy /y %%i !LabelEFI!:\!name_PE!\boot.sdi ) set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fwSeek.txt) do ( set /a a+=1 if !a!==!NumWimSource! copy /y %%i !LabelEFI!:\!name_PE!\boot.wim ) ) if !bIsUEFI!==n ( set bCopyBoot=n set /p bCopyBoot=是否需要从PE源盘复制MBR启动环境文件,默认不,需要输入小写y---- if not !bCopyBoot!==n ( set bHvLSr=n for /l %%i in (1,1,5) do ( if !bHvLSr!==n ( set /p LPartPE=请输入PE源盘盘符,然后回车---- if not exist !LPartPE!: echo 这个盘符根本就没有使用了,你不要搞笑好吧 if exist !LPartPE!: set bHvLSr=y ) ) if not exist !LPartPE!:\boot\ ( echo 这个盘里没有启动环境文件,你不要搞笑好吧!&& goto End ) xcopy /h /y !LPartPE!:\bootmgr !LabelEFI!:\ if exist !LabelEFI!:\boot\ rd /s /q !LabelEFI!:\boot\ if not exist !LabelEFI!:\boot\ md !LabelEFI!:\boot\ robocopy !LPartPE!:\boot\ !LabelEFI!:\boot\ /e /xf bcd ) ) set bbPE=y set /p bbPE=请问是否建PE菜单项,默认建,如果不建输入小写n---- if not !bbPE!==n ( if !bCopyPE!==n ( ::没有复制源文件,说明ESP/MSR分区中已经存在PE源文件,查找相应路径 echo. dir !LabelEFI!:\*.sdi /b /s >%temp%\fdSeek.txt echo 查找到!LabelEFI!分区下所有映像引导文件*.sdi如下表 echo ----------------------------------------------------- set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fdSeek.txt) do ( set /a a+=1&&echo 系统引导文件:!a! %%i ) set /a CountWim=!a! if !a!==0 echo 该分区无PE系统映像引导文件,退出重来吧!&&goto End echo ----------------------------------------------------- set /p NumSdi=请输入系统映像引导文件序号,我不检测无效序号,默认1---- set bVldNSr=n for /l %%i in (1,1,!CountWim!) do ( if !NumSdi!==%%i set bVldNSr=y ) if !bVldNSr!==n echo 你没有输入有效PE系统映像文件序号,退出重来吧!&&goto End set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fdSeek.txt) do ( set /a a+=1 if !a!==!NumSdi! ( set namePathSdi=%%i set name_PathSdi=!namePathSdi:~3,-9! ) ) echo 引导文件路径是:!name_PathSdi! set /p name_PathSdi=如果路径有误,请手工输入,默认不需要,直接回车---- echo. dir !LabelEFI!:\*.wim /b /s >%temp%\fwSeek.txt echo 查找到!LabelEFI!分区下所有PE映像文件如下表 echo ----------------------------------------------------- set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fwSeek.txt) do ( set /a a+=1&&echo PE系统映像:!a! %%i) set /a CountWim=!a! if !a!==0 echo 该分区无PE系统映像文件,退出重来吧!&&goto End echo ----------------------------------------------------- set /p NumWimSource=请输入PE系统映像文件序号,我不检测无效序号,默认1---- set bVldNSr=n for /l %%i in (1,1,!CountWim!) do ( if !NumWimSource!==%%i set bVldNSr=y ) if !bVldNSr!==n echo 你没有输入有效PE系统映像文件序号,退出重来吧!&&goto End set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fwSeek.txt) do ( set /a a+=1 if !a!==!NumWimSource! ( set namePathWim=%%i set name_PathWim=!namePathWim:~3,-9! ) ) echo PE系统文件路径是:!name_PathWim! set /p name_PathWim=如果路径有误,请手工输入,默认不需要,直接回车---- ) set name_MenuPE=PE_MBY set /p name_MenuPE=输入菜单项名字,默认PE_MBY,可自行输入,如MAXDOS_WYS---- echo list vol>%temp%\DiskPart.txt echo exit>>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt set /p NumVolESP=请输入GPT中ESP分区或MBR中MSR分区的卷编号,直接回车---- bcdedit /create {bootmgr} /d "Marc Boot Manager" >nul 2>nul bcdedit /set {bootmgr} device partition=\device\harddiskvolume!NumVolESP! >nul 2>nul ::创建设备项 bcdedit /create /d "!name_MenuPE!" /device>%~dp0fdid.txt ::取得所生成的设备标识符 for /f "tokens=2 delims= " %%i in (%~dp0fdid.txt) do (set fdid=%%i) ::设置设备所在分区 bcdedit /set !fdid! ramdisksdidevice partition=!LabelEFI!: ::设置设备所在的固定路径 bcdedit /set !fdid! ramdisksdipath \!name_PathSdi!\boot.sdi ::创建菜单项 bcdedit /create /d "!name_MenuPE!" /application osloader>%~dp0fmid.txt ::取得所生成的菜单标识符 for /f "tokens=2 delims= " %%i in (%~dp0fmid.txt) do (set fmid=%%i) ::设置启动设备 bcdedit /set !fmid! device ramdisk=[!LabelEFI!:]\!name_PathWim!\boot.wim,!fdid! ::设置系统设备 bcdedit /set !fmid! osdevice ramdisk=[!LabelEFI!:]\!name_PathWim!\boot.wim,!fdid! ::设定启动程序(winload)的路径 if not !bIsUEFI!==n bcdedit /set !fmid! path \windows\system32\winload.efi if !bIsUEFI!==n bcdedit /set !fmid! path \windows\system32\winload.exe ::设置系统根目录 bcdedit /set !fmid! systemroot \windows ::开启detecthal支持 bcdedit /set !fmid! detecthal yes ::开启WinPE支持 bcdedit /set !fmid! winpe yes ::设置nx为optin bcdedit /set !fmid! nx optin ::设置为最后一项显示 bcdedit /displayorder !fmid! /addlast bcdedit /timeout 2 bcdedit /enum ) del /f /s /q %~dp0fdid.txt>nul 2>nul del /f /s /q %~dp0fmid.txt>nul 2>nul goto End ) if !OpChoice!==13 ( echo. echo 1:本批处理、驱动和补丁子目录、IE升级包必需都在当前目录。 echo 在同目录中有\Driver、\patch和\IE固定目录,放置驱动和补丁子目录。 echo 如\Driver\Drv_Win8_x64,\patch\patch_Win8_x64 echo 调整Win7、Win8功能,可能还要准备Win8原版光盘,或者IE10安装包。 echo. echo 2:当前目录下工作子目录,挂载文件夹\Mount,临时文件夹\tmp_Imgex。 echo 临时文件*.txt都在系统临时文件夹%temp%中。 echo. pause ::准备全局变量 set /a a=0 set /a CountWim=0 set /a CountIndex=0 set /a NumWimSource=0 set /a IndexSource=0 ::准备局部变量 set /a CountPatch=0 set /a NumPatch=0 set /a CountDrv=0 set /a NumDrv=0 set /a CountIE=0 set /a NumIE=0 cls echo. set bPatDism=y set /p bPatDism=请问是否封装系统补丁?默认是y,直接回车/不是输入小写n---- set bDrvDism=y set /p bDrvDism=请问是否封装硬件驱动?默认是y,直接回车/不是输入小写n---- set bIsWin8=y set /p bIsWin8=请问是要操作Win8映像吗?默认是y,直接回车/不是输入小写n---- if not !bIsWin8!==n ( set bEnabNet3=y set /p bEnabNet3=请问是否启用 .Net 3.5/2支持?默认是y,直接回车/不是输入小写n---- if not !bEnabNet3!==n ( set /p LabelISO=请插入光盘或者装载ISO,并准确输入盘符!---- ) ) if !bIsWin8!==n ( set bDisabFun=y set /p bDisabFun=请问是否关闭Win7部分功能?默认是y,直接回车/不是输入小写n---- set bDismIE10=y set /p bDismIE10=请问是否封装IE10?默认是y,直接回车/不是输入小写n---- ) ::准备源系统映像文件与索引序号。 set bHvLSr=n for /l %%i in (1,1,5) do ( if !bHvLSr!==n ( set /p LPartSource=请输入系统映像文件所在盘,不带冒号---- if not exist !LPartSource!: echo 这个盘符根本就没有使用了,你不要搞笑好吧 if exist !LPartSource!: set bHvLSr=y ) ) dir !LPartSource!:\*.wim /b /s >%temp%\fSeek.txt echo 查找到!LPartSource!分区下所有映像文件如下表 echo ----------------------------------------------------- set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1&&echo 系统映像:!a! %%i) set /a CountWim=!a! if !a!==0 echo 该分区无系统映像文件,退出重来吧!&&goto End ::准备临时文件夹\tmp_Imagex,预备以后作为ScratchDir使用,这段代码不能随意移动位置! ::目的是1:在PE中临时文件空间不足,源文件盘空间一般没问题;2:如果源文件在固态盘,要充分固态盘速度优势。 if not exist !LPartSource!:\tmp_Imagex md !LPartSource!:\tmp_Imagex if exist !LPartSource!:\tmp_Imagex rd /s /q !LPartSource!:\tmp_Imagex&&md !LPartSource!:\tmp_Imagex ::准备局部文件夹\mount if not exist !LPartSource!:\mount md !LPartSource!:\mount if exist !LPartSource!:\mount ( :rd dir !LPartSource!:\mount /ad /b /s >%temp%\del_rd.txt for /f "usebackq delims=" %%i in (%temp%\del_rd.txt) do ((takeown /f "%%i" /r /d y >%temp%\del_log.txt>nul 2>nul)&(@echo y|icacls "%%i" /t /q /grant administrator:f>nul 2>nul )&(rd "%%i" /s /q>nul 2>nul)) takeown /f !LPartSource!:\mount /r /d y >%temp%\del_log.txt>nul 2>nul @echo y|icacls !LPartSource!:\mount /t /q /grant administrator:f>nul 2>nul rd !LPartSource!:\mount /s /q if exist !LPartSource!:\mount goto :rd del /f /s /q %temp%\del_log.txt>nul 2>nul del /f /s /q %temp%\del_rd.txt>nul 2>nul md !LPartSource!:\mount ) set /p NumWimSource=请输入系统映像文件序号,我不检测无效序号,不带冒号---- set bVldNSr=n for /l %%i in (1,1,!CountWim!) do ( if !NumWimSource!==%%i set bVldNSr=y ) if !bVldNSr!==n echo 你没有输入有效系统映像文件序号,退出重来吧!&&goto End set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1 if !NumWimSource!==!a! Dism /get-imageinfo /imagefile:%%i ) set /p IndexSource=请输入系统映像索引序号,我不检测无效序号,不带冒号---- if not !bPatDism!==n ( cls set /a a=0 dir %~dp0patch /d /b >%temp%\dirPatSeek.txt echo 查找到%~dp0patch目录下所有子目录,仅查子目录 for /f "usebackq delims=" %%i in (%temp%\dirPatSeek.txt) do ( set /a a+=1 echo 所有子目录:!a! %%i) set /a CountPatch=!a! if !CountPatch!==0 echo 无任何patch子目录&&set bPatDism=n echo ----------------------------------------------------- if not !CountPatch!==0 ( set /p NumPatch=请输入patch子目录序号,不带冒号---- set bVldPat=n for /l %%i in (1,1,!CountPatch!) do ( if !NumPatch!==%%i set bVldPat=y ) if !bVldPat!==n echo 你没有输入有效patch子目录序号,退出重来吧!&&goto End ) ) if not !bDrvDism!==n ( cls set /a a=0 dir %~dp0Driver /d /b >%temp%\dirDrvSeek.txt echo 查找到%~dp0Driver目录下所有子目录,仅查子目录 for /f "usebackq delims=" %%i in (%temp%\dirDrvSeek.txt) do ( set /a a+=1 echo 所有子目录:!a! %%i) set /a CountDrv=!a! if !CountDrv!==0 echo 无任何Driver子目录&&set bDrvDism=n echo ----------------------------------------------------- if not !CountDrv!==0 ( set /p NumDrv=请输入patch子目录序号,不带冒号---- set bVldDrv=n for /l %%i in (1,1,!CountDrv!) do ( if !NumDrv!==%%i set bVldDrv=y ) if !bVldDrv!==n echo 你没有输入有效Driver子目录序号,退出重来吧!&&goto End ) ) if !bIsWin8!==n ( if not !bDismIE10!==n ( echo IE10升级包在当前目录子目录IE下! set /a a=0 dir %~dp0IE /d /b >%temp%\dirIESeek.txt echo 查找到%~dp0IE目录下所有子目录,仅查子目录 for /f "usebackq delims=" %%i in (%temp%\dirIESeek.txt) do ( set /a a+=1 echo 所有子目录:!a! %%i) set /a CountIE=!a! if !CountIE!==0 echo 无任何IE子目录&&set bDismIE10=n echo ----------------------------------------------------- if not !CountIE!==0 ( set /p NumIE=请输入IE子目录序号,不带冒号---- set bVldIE=n for /l %%i in (1,1,!CountIE!) do ( if !NumIE!==%%i set bVldIE=y ) if !bVldIE!==n echo 你没有输入有效IE子目录序号,退出重来吧!&&goto End ) ) ) set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1 if !NumWimSource!==!a! dism /mount-image /imagefile:"%%i" /index:!IndexSource! /mountdir:!LPartSource!:\mount /Scratchdir:!LPartSource!:\tmp_Imagex ) if not !bPatDism!==n ( set /a a=0 for /f "usebackq delims=" %%i in (%temp%\dirPatSeek.txt) do ( set /a a+=1 if !NumPatch!==!a! dir "%~dp0patch\%%i" /b /s >%temp%\fPatSeek.txt ) for /f "usebackq delims=" %%j in (%temp%\fPatSeek.txt) do ( dism /image:!LPartSource!:\mount /add-package /packagepath:%%j /Scratchdir:!LPartSource!:\tmp_Imagex ) ) if not !bDrvDism!==n ( set /a a=0 for /f "usebackq delims=" %%i in (%temp%\dirDrvSeek.txt) do ( set /a a+=1 if !NumDrv!==!a! dism /image:!LPartSource!:\mount /add-driver /driver:"%~dp0Driver\%%i" /recurse /forceunsigned /Scratchdir:!LPartSource!:\tmp_Imagex ) ) if not !bIsWin8!==n ( if not !bEnabNet3!==n ( dism /image:!LPartSource!:\mount /enable-Feature /FeatureName:netfx3 /Source:!LabelISO!:\sources\sxs /Scratchdir:!LPartSource!:\tmp_Imagex ) ) if !bIsWin8!==n ( if not !bDisabFun!==n ( echo 调整功能独立操作,以增强批处理兼容性,连Win7 Starter都可以用。 dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:TabletPCOC dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:WindowsGadgetPlatform dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:MediaCenter dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:FaxServicesClientPackage dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:Printing-XPSServices-Features dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:Xps-Foundation-Xps-Viewer dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:Printing-Foundation-InternetPrinting-Client dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:Hearts dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:Solitaire dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:SpiderSolitaire dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:FreeCell dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:Minesweeper dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:PurblePlace dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:Chess dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:Shanghai dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:InboxGames dism /Image:!LPartSource!:\mount /Disable-Feature /Scratchdir:!LPartSource!:\tmp_Imagex /FeatureName:OpticalMediaDisc ) if not !bDismIE10!==n ( set /a a=0 for /f "usebackq delims=" %%i in (%temp%\dirIESeek.txt) do ( set /a a+=1 if !NumIE!==!a! ( dism /image:!LPartSource!:\mount /add-package /packagepath:%~dp0ie\%%i\ie-win7.cab /packagepath:%~dp0ie\%%i\ielangpack-CHS.CAB /Scratchdir:!LPartSource!:\tmp_Imagex dism /image:!LPartSource!:\mount /add-package /packagepath:%~dp0ie\%%i\IE-Hyphenation-NEU.msu /packagepath:%~dp0ie\%%i\IE-Spelling-NEU.msu /Scratchdir:!LPartSource!:\tmp_Imagex ) ) ) ) set /p bCommit=请问是否保存映像修改,默认是y,直接回车/不保存输入小写n---- if not !bCommit!==n ( dism /unmount-image /mountdir:!LPartSource!:\mount /commit /Scratchdir:!LPartSource!:\tmp_Imagex ) if !bCommit!==n ( dism /unmount-image /mountdir:!LPartSource!:\mount /discard /Scratchdir:!LPartSource!:\tmp_Imagex ) rd /s /q !LPartSource!:\tmp_Imagex rd /s /q !LPartSource!:\mount goto End ) if !OpChoice!==14 ( echo 查找同目录(及子目录)下自动应答文件,如果一个都没有,那就不要试了。 echo 本工具包提供的自动应答文件分64位和32位两种,通用版仅仅实现跳过oobe过程。 set /a NumUntitled=0 set /a a=0 set NameUntitled=null dir %~dp0*.xml /b /s >%~dp0fAppUntitled.txt echo 查找到%~dp0目录下所有自动应答文件如下表 echo ----------------------------------------------------- for /f "usebackq delims=" %%i in (%~dp0fAppUntitled.txt) do ( set /a a+=1&&echo 应答文件:!a! %%i) if !a!==0 echo 根本就没有一个自动应答文件,那封装也没什么意思了,准备退出!&&goto End echo. set /p NumUntitled=请认真选择应答文件序号,不带冒号---- set /a a=0 for /f "usebackq delims=" %%i in (%~dp0fAppUntitled.txt) do ( set /a a+=1 if !NumUntitled!==!a! echo 你选择的应答文件是:%%i ) set bGoSysprep=y set /p bGoSysprep=最后请确认现在可以开始封装了吗?默认是,直接回车,如果算了,请输入小写n---- if not !bGoSysprep!==n ( echo 正在帮您清除系统垃圾文件,请稍等...... ::删除补丁备份目录 rd %windir%\$hf_mig$ /Q /S ::删除系统盘Office安装临时文件 rd /s /q %systemdrive%\msocache dir /ad /b /s %windir%\$NtUninstall* >%~dp0Del_rd.txt dir /ad /b /s %windir%\SoftwareDistribution\Download>>%~dp0Del_rd.txt for /f %%i in (%~dp0Del_rd.txt ) do ( rd "%%i" /s /q ) del %~dp0Del_rd.txt /f /q ::删除补丁安装记录内容(下面的del /f /s /q %systemdrive%\*.log已经包含删除此类文件) del %windir%\KB*.log /f /q ::删除系统盘目录下临时文件 del /f /s /q %windir%\*.tmp ::删除系统盘目录下临时文件 del /f /s /q %windir%\*._mp ::删除系统盘目录下日志文件 del /f /s /q %windir%\*.log ::删除系统盘目录下GID文件 del /f /s /q %windir%\*.gid ::删除系统目录下scandisk(磁盘扫描)留下的无用文件 del /f /s /q %windir%\*.chk ::删除系统目录下old文件 del /f /s /q %windir%\*.old ::删除回收站的无用文件 del /f /s /q %windir%\recycled\*.* ::删除系统目录下备份文件 del /f /s /q %windir%\*.bak ::删除系统维护等操作产生的临时文件 rd /s /q %windir%\temp md %windir%\temp ::删除当前用户的COOKIE(IE) del /f /q %userprofile%\cookies\*.* ::删除internet临时文件 del /f /s /q "%userprofile%\local settings\temporary internet files\*.*" ::删除当前用户日常操作临时文件 del /f /s /q "%userprofile%\local settings\temp\*.*" copy %systemdrive%\Users\%username%\Favorites\*.* %systemdrive%\Users\Default\Favorites dir %~dp0Desk*.bat /b /s >%~dp0fTmp.txt dir %~dp0Driver*.bat /b /s >>%~dp0fTmp.txt for /f %%i in (%~dp0fTmp.txt) do ( copy %%i %windir%\system32 ) set /a a=0 for /f "usebackq delims=" %%i in (%~dp0fAppUntitled.txt) do ( set /a a+=1 if !a!==!NumUntitled! %windir%\system32\sysprep\sysprep.exe /oobe /generalize /shutdown /unattend:%%i ) ) goto End ) if !OpChoice!==15 ( set bIsUEFI=y set /p bIsUEFI=请问BIOS是否UEFI,默认是,不是请输入小写n---- set bHvLab=n set /p bHvLab=采用MBR但无MSR,或者MBR中MSR分区/ESP分区如已有盘符,输入y,其余直接回车---- if !bHvLab!==y ( set /p LabelEFI=请输入ESP分区或MBR中MSR分区盘符或者MBR无MSR分区时的系统盘符---- ) if not !bHvLab!==y ( ::给EFI或者MSR分区分配盘符 set bHvSetESP=n for %%i in (z y x w v u t s r q p o n m) do ( if !bHvSetESP!==n ( if not exist %%i: set LabelEFI=%%i&&set bHvSetESP=y ) ) echo list vol>%temp%\DiskPart.txt echo exit>>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt set /p NumVolESP=请输入GPT中ESP分区或MBR中MSR分区的卷编号,直接回车---- echo select vol !NumVolESP!>%temp%\DiskPart.txt echo assign letter=!LabelEFI!>>%temp%\DiskPart.txt echo exit>>%temp%\DiskPart.txt diskpart /s %temp%\DiskPart.txt ) bcdedit /create {bootmgr} /d "Marc Boot Manager" >nul 2>nul bcdedit /set {bootmgr} device partition=\device\harddiskvolume!NumVolESP! >nul 2>nul set b8Boot=n set /p b8Boot=请问是否建8.1/8/7引导,默认不,如果要建输入小写y---- if !b8Boot!==y ( ::创建8.1/8/7引导项 set l_Sys8=null set /p l_Sys8=请问要为哪个盘的Windows 8.1/8/7建立引导,输入盘符---- set name_MenuWindows=Windows_8.1/8/7 set /p name_MenuWindows=默认菜单项名字Windows_8.1/8/7,可自行输入不带空格名字,如Windows_7---- bcdedit /create /d "!name_MenuWindows!" /application osloader>%temp%\fmid.txt for /f "tokens=2 delims= " %%i in (%temp%\fmid.txt) do (set fmid=%%i) bcdedit /set !fmid! device partition=!l_Sys8!: if not !bIsUEFI!==n bcdedit /set !fmid! path \windows\system32\winload.efi if !bIsUEFI!==n bcdedit /set !fmid! path \windows\system32\winload.exe bcdedit /set !fmid! osdevice partition=!l_Sys8!: bcdedit /set !fmid! systemroot \windows bcdedit /displayorder !fmid! /addlast ) set b8VhdBoot=n set /p b8VhdBoot=请问是否建8.1/8/7 VHD引导,默认不,如果要建输入小写y---- if !b8VhdBoot!==y ( ::创建8.1/8/7 VHD引导项 set namePathVhd=null ::准备VHD系统文件与序号。 set bHvLSr=n for /l %%i in (1,1,5) do ( if !bHvLSr!==n ( set /p LPartSource=请输入VHD系统文件所在盘,不带冒号---- if not exist !LPartSource!: echo 这个盘符根本就没有使用了,你不要搞笑好吧 if exist !LPartSource!: set bHvLSr=y ) ) dir !LPartSource!:\*.vhd /b /s >%temp%\fSeek.txt echo 查找到!LPartSource!分区下所有VHD文件如下表 echo ----------------------------------------------------- set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1&&echo 系统映像:!a! %%i) set /a CountWim=!a! if !a!==0 echo 该分区无系统VHD文件,退出重来吧!&&goto End set NumWimSource=1 set /p NumWimSource=请输入VHD系统文件序号,我不检测无效序号,默认1---- set bVldNSr=n for /l %%i in (1,1,!CountWim!) do ( if !NumWimSource!==%%i set bVldNSr=y ) if !bVldNSr!==n echo 你没有输入有效VHD系统文件序号,退出重来吧!&&goto End set /a a=0 for /f "usebackq delims=" %%i in (%temp%\fSeek.txt) do ( set /a a+=1 if !a!==!NumWimSource! ( set nameTmp=%%i echo 你选择的VHD系统文件是:%%i ) ) set namePathVhd=!nameTmp:~3! set name_MenuVHD=VHD_MBY set /p name_MenuVHD=输入菜单项名字,默认VHD_MBY,可自行输入,如MAXDOS_WYS---- bcdedit /create /d "!name_MenuVHD!" /application osloader>%temp%\fmid.txt for /f "tokens=2 delims= " %%i in (%temp%\fmid.txt) do (set fmid=%%i) bcdedit /set !fmid! device vhd=[!LPartSource!:]\!namePathVhd! if not !bIsUEFI!==n bcdedit /set !fmid! path \windows\system32\winload.efi if !bIsUEFI!==n bcdedit /set !fmid! path \windows\system32\winload.exe bcdedit /set !fmid! osdevice vhd=[!LPartSource!:]\!namePathVhd! bcdedit /set !fmid! systemroot \windows bcdedit /set !fmid! detecthal yes bcdedit /displayorder !fmid! /addlast ) if !bIsUEFI!==n ( set bXP=n set /p bXP=请问是否建XP引导,默认不,如果要建输入小写y---- if !bXP!==y ( ::创建XP引导项 set l_SysXP=null set /p l_SysXP=请问要为哪个盘的XP建立引导,输入盘符---- set name_MenuXP=XP_MBY set /p name_MenuXP=输入菜单项名字,默认XP_MBY,可自行输入,如MAXDOS_WYS---- bcdedit /create {ntldr} /d "!name_MenuXP!" bcdedit /set {ntldr} device partition=!l_SysXP!: bcdedit /set {ntldr} path \ntldr bcdedit /displayorder {ntldr} /addlast ) ) goto End ) if !OpChoice!==16 ( echo. bcdedit /enum /v >%temp%\x.txt ::取得GUID所在行。 set numOrder=null set /a a=0 for /f "delims= " %%i in ( %temp%\x.txt ) do ( set /a a+=1 if %%i==displayorder set numOrder=!a! ) find "description" %temp%\x.txt >%temp%\m.txt set /a a=0 for /f "skip=3 tokens=1,* delims= " %%i in ( %temp%\m.txt ) do ( set bDel=n set /a Tmp=!a!+1 set /p bDel=系统启动菜单第!Tmp!项是:%%j,请问是否删除,默认不删,删除输入y---- set /a numItem=!a!+!numOrder! if not !bDel!==n ( set /a c=0 for /f "tokens=1,* delims= " %%k in ( %temp%\x.txt ) do ( set /a c+=1 if !c!==!numItem! ( if !numItem!==!numOrder! ( set item=%%l bcdedit /delete %%l >nul 2>nul bcdedit /delete %%l /f >nul 2>nul ) if not !numItem!==!numOrder! ( set item=%%k bcdedit /delete %%k >nul 2>nul bcdedit /delete %%k /f >nul 2>nul ) ) ) ) set /a a+=1 ) del /f /s /q %temp%\x.txt>nul 2>nul del /f /s /q %temp%\m.txt>nul 2>nul bcdedit /enum echo. goto End ) :End set bProceed=n set /p bProceed=请问继续其它任务吗,重复运行默认应答选项有效,默认不n,直接回车/是输入小写y---- if !bProceed!==y goto op del /f /s /q %temp%\fSeek.txt>nul 2>nul del /f /s /q %temp%\fSrSeek.txt>nul 2>nul del /f /s /q %temp%\fDsSeek.txt>nul 2>nul del /f /s /q %temp%\dirPatSeek.txt>nul 2>nul del /f /s /q %temp%\dirDrvSeek.txt>nul 2>nul del /f /s /q %temp%\dirIESeek.txt>nul 2>nul del /f /s /q %temp%\fPatSeek.txt>nul 2>nul del /f /s /q %temp%\ImageInfo.txt>nul 2>nul del /f /s /q %temp%\DiskPart.txt>nul 2>nul del /f /s /q %temp%\tmp.txt>nul 2>nul del /f /s /q %~dp0fAppUntitled.txt>nul 2>nul del /f /s /q %~dp0fTmp.txt>nul 2>nul del /f /s /q %~dp0null>nul 2>nul del /f /s /q %temp%\Out_DiskPart.txt>nul 2>nul del /f /s /q %temp%\Out_tmp.txt>nul 2>nul del /f /s /q %temp%\tmp.txt>nul 2>nul del /f /s /q %~dp0fdid.txt>nul 2>nul del /f /s /q %~dp0fmid.txt>nul 2>nul 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 |
| 这回可以用于自动应答分区了,惺惺惜惺惺 |
|
多谢多谢 辛苦了 |
| 虽然看不懂,便来支持楼主分享的代码 |
| 好东西,小白不知道怎样用。 |
| 太好了,谢谢了!!!!!! |
| 收藏慢慢学习 谢谢 |
| 收藏学习,谢谢分享! |
| 功能很强大,但如果有图形界面或者更好用! |
| 真给力啊。。。谢谢楼主分享了 |
| 麻烦各位大神推荐一款Win8.1 x64 PE,一定要能支持Dism和Diskpart操作,要ISO版的,目前在用WingXY Win7 x64 PE,非常好,不过Dism版本太老了,想用8.1最起码要8的Dism。叫我从头研究PE,没时间也没兴趣了。把这个工具包本身搞完,耗费了我SSD的好几十个p/e了,人也折腾得够呛了。 |
| 很有用 收藏啦 |
|
收藏备用 辛苦啦 |
|
收藏学习,谢谢分享..... |
| 不错的东西,收藏了 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.