无忧启动论坛

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

[发布] Windows Dism 处理脚本

[复制链接]
跳转到指定楼层
1#
发表于 2015-6-13 22:24:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 知彼知己 于 2015-8-22 23:20 编辑

程序开发作者是懒得勤快大师,感谢他为此开发付出了极大努力,按作者要求不能下载,本次发布仅供大家学习研究,如果触犯了作者的权利,请及时与我联系
author:http://www.microsoft.com
cls
@echo off&pushd %~dp0
ver | find "4.1." > NUL &&  goto fail
ver | find "5.1." > NUL &&  goto fail
mode con: cols=92 lines=30
set TempFile_Name=%SystemRoot%\System32\BatTestUACin_SysRt%Random%.batemp
( echo "BAT Test UAC in Temp" >%TempFile_Name% ) 1>nul 2>nul
if exist %TempFile_Name% (
del %TempFile_Name% 1>nul 2>nul
GOTO mainstart
) else (
GOTO admin
)
:mainstart
mode con: cols=92 lines=30
if exist X:\Windows (set environment=PE或RAMOS) else (set environment=Windows)
color 0b
title Microsoft Windows DISM 处理 (%environment%环境)
GOTO MENU
:MENU

ECHO. -=-=-=-=-=-=Microsoft Windows DISM 处理=-=-=-=-=-=-
echo ####################################################
echo #              Microsoft Windows DISM              #
echo #               欢迎光临微软中国官网               #
echo #             http://www.microsoft.com             #
echo ####################################################
ECHO.
ECHO  !!!!!!!请以管理员身份运行程序!!!!!!!
ECHO.
echo 当前系统环境:%environment%
echo.
ver | find "6.1." > NUL &&  echo 您当前操作系统是Windows7,程序中某些功能可能无法正常使用.
echo.
if exist X:\Windows (goto pestart) else (goto winstart)
:winstart
ECHO. 1 DISM命令行部署系统
ECHO.
ECHO. 2 ESD和WIM映像相互转换
ECHO.
ECHO. 3 命令行创建VHD
ECHO.
ECHO. 4 采用Wimboot启动方式部署系统
ECHO.
ECHO. 5 系统健康检查并强制修复系统核心组件
ECHO.  
ECHO. 6 系统引导项添加与修复
ECHO.
ECHO. 7 查看帮助
ECHO.
choice /c 1234567 /n /m "请输入选择项目的序号:"
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP%==1 goto apply
IF %ERRORTEMP%==2 goto converter
IF %ERRORTEMP%==3 goto vhd
IF %ERRORTEMP%==4 goto wimboot
IF %ERRORTEMP%==5 goto scanhealth
IF %ERRORTEMP%==6 goto BCDList
IF %ERRORTEMP%==7 goto help
:pestart
ECHO. 1 DISM命令行部署系统
ECHO.
ECHO. 2 命令行创建VHD
ECHO.
ECHO. 3 采用Wimboot启动方式部署系统
ECHO.
ECHO. 4 系统引导项添加与修复
ECHO.
ECHO. 5 查看帮助
set /p a=请输入选择项目的序号:
if %a%==1 goto apply
if %a%==2 goto vhd
if %a%==3 goto wimboot
if %a%==4 goto BCDList
if %a%==5 goto help
goto pestart
:apply
cls
if /i "%PROCESSOR_IDENTIFIER:~0,3%" neq "X86" (pushd %~dp0dism64) else (pushd %~dp0dism86)
set cr=Windows NT6+半自动安装器 (%environment%环境)   %date% %time%
color 0b& title %cr%
echo.
echo # %cr% #
echo.
echo 请将需要安装系统的ESD或WIM映像拖动到此处或复制路径并粘贴到此处:
set /p source=
if not defined source echo 没有发现系统映像,请按任意键重新开始. && pause >nul && goto apply
if %windir% neq X:\Windows (if not exist "%source%" echo 没有发现系统映像,路径可能有错误,请按任意键重新开始. && pause >nul && goto apply) else (if not exist %source% echo 没有发现系统映像,路径可能有错误,按任意键重新开始. && pause >nul && goto apply)
if not exist X:\Windows (dism /get-wiminfo /wimfile:"%source%") else ( dism /get-wiminfo /wimfile:%source%)
if not exist X:\Windows (dism /get-wiminfo /wimfile:"%source%" | find "错误" > NUL &&  goto error) else ( dism /get-wiminfo /wimfile:%source% | find "错误" > NUL &&  goto error)
echo.
echo 请根据以上信息输入系统映像的索引号,如果这个映像只含有一个系统映像,请直接输入1,默认值是1.
set num=1
set /p num=
goto select
:select
echo 请输入安装系统的目标盘盘符(无需输入冒号,直接输入盘符的字母即可):
set /p tar=
if not defined tar goto select
if not exist %tar%: echo %tar%盘不存在,请重新输入! && goto select
echo 您选择的系统目标盘是:%tar%盘.
:reselect
echo 您的是否正确?选择“是(y)(默认)”则开始格式化目标盘并开始安装操作系统,选择“否(n)"则不格式化目标盘直接安装操作系统,输入“r”则重新选择目标盘.
set ID=y
set /p ID=
if "%id%"=="y" goto continue
if "%id%"=="n" goto install
if "%id%"=="r" goto select
echo 选择有错误,请重新选择,请按任意键继续! && pause >nul && goto reselect
:continue
%windir%\system32\format %tar%: /q /y | find "格式化失败" > nul && goto formatfail
if exist %tar%:\$RECYCLE.BIN goto formatfail
echo 格式化成功.
:install
echo 请输入您的引导分区,如果你不希望处理引导,就选择一个不存在的分区盘符即可:
set /p boot=
cls
echo 开始安装操作系统到%tar%盘......
call :time_start
disableX.exe
if not exist X:\Windows (dism /apply-image /imagefile:"%source%" /index:%num% /applydir:%tar%:) else (dism /apply-image /imagefile:%source% /index:%num% /applydir:%tar%:)
%windir%\system32\bcdboot.exe %tar%:\windows /s %boot%: /f all /l zh-cn >nul 2>nul
if exist %tar%:\windows\slui.exe label %tar%: Windows8.1企业版 >nul
if exist %tar%:\windows\system\silent.bat label %tar%: Windows7旗舰版 >nul
call :time_end
echo 操作完成,安装系统共计用时%hour%小时%minute%分%second%秒.
if not defined boot echo 请按任意键退出。 && goto exit
goto checkboot
:vhd
pushd %~dp0&color b
cls
title 命令行创建VHD工具 %date%%time%
echo    #命令行创建VHD工具 %date%%time%#
echo.
set /p name=请输入VHD盘的文件名(不需要加后缀,只需要文件名即可):
if not defined name echo 没有输入VHD虚拟硬盘的文件名,请按任意键重新开始. && pause >nul && goto vhd
set /p room=请输入VHD磁盘的大小(单位:GB):
if not defined room echo 没有输入VHD虚拟硬盘的大小,请按任意键重新开始. && pause >nul && goto vhd
set /a room=room*1024+8
set /p lab=请输入虚拟盘的卷标:
if not defined lab echo 没有输入VHD虚拟硬盘的卷标,请按任意键重新开始. && pause >nul && goto vhd
echo.
echo 您需要创建VHD还是VHDX?      1.VHD         2.VHDX
set /p disk=
if not defined disk echo 没有选择VHD虚拟硬盘的类型,请按任意键重新开始. && pause >nul && goto vhd
if %disk%==1 (set vhdfile=vhd) else (set vhdfile=vhdx)
echo 请选择VHD保存的位置(路径中不要包含中文名称):
Folder "set d_temp=" "c:" "请选择VHD保存的位置:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set addr=%d_temp:~1,-1%
if %addr%==%addr:~0,2%\ set addr=%addr:~0,2%
echo create vdisk file="%addr%\%name%.%vhdfile%" maximum=%room% TYPE=EXPANDABLE>%temp%\vdisk.txt
echo select vdisk file="%addr%\%name%.%vhdfile%">>%temp%\vdisk.txt
echo attach vdisk>>%temp%\vdisk.txt
echo create partition primary>>%temp%\vdisk.txt
echo format fs=ntfs label=%lab% quick>>%temp%\vdisk.txt
setlocal EnableDelayedExpansion
set a=0
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z)do (
if not exist %%i: (
set /a a=a+1
if !a!==2 (
echo assign letter=%%i>>%temp%\vdisk.txt
set tardisk=%%i
goto vdisk
)
)
)
:vdisk
echo exit>>%temp%\vdisk.txt
if exist %addr%\%name%.%vhdfile% echo.&goto vhdend
%windir%\system32\diskpart /s %temp%\vdisk.txt
if /i "%PROCESSOR_IDENTIFIER:~0,3%" neq "X86" (pushd %~dp0dism64) else (pushd %~dp0dism86)
:系统源
echo 请将需要安装系统的ESD或WIM映像拖到此处或将映像的路径复制后粘贴到此处,并按回车:
set /p source=
if not defined source echo 没有发现系统映像,请按任意键重新开始。 && pause >nul && goto 系统源
if %windir% neq X:\Windows (if not exist "%source%" echo 没有发现系统映像,路径可能有错误,请按任意键重新开始. && pause >nul && goto 系统源) else (if not exist %source% echo 没有发现系统映像,路径可能有错误,请按任意键重新开始。 && pause >nul && goto 系统源)
if not exist X:\Windows (dism /get-wiminfo /wimfile:"%source%") else (dism /get-wiminfo /wimfile:%source%)
if not exist X:\Windows (dism /get-wiminfo /wimfile:"%source%" | find "错误" > NUL &&  goto error) else ( dism /get-wiminfo /wimfile:%source% | find "错误" > NUL &&  goto error)
echo.
echo 请根据以上信息输入系统映像的索引号,如果这个映像只含有一个系统映像,直接输入1,默认值是1.
set num=1
set /p num=
cls
echo 开始将操作系统部署到虚拟磁盘文件%addr%\%name%.%vhdfile%里面......
echo 当前正在部署的 %vhdfile% 在资源管理器中的盘符是 %tardisk%:
call :time_start
disableX.exe
if not exist X:\Windows (dism /apply-image /imagefile:"%source%" /index:%num% /applydir:%tardisk%:\) else (dism /apply-image /imagefile:%source% /index:%num% /applydir:%tardisk%:\)
call :time_end
goto addbcd
:vhdend
echo 文件已存在,请按任意键退出!
goto exit
:addbcd
echo 系统部署完成,安装系统共计用时%hour%小时%minute%分%second%秒,是否需要处理引导?
echo 1.是,我需要添加引导项       2.不要处理,直接弹出虚拟硬盘( %tardisk%: )并退出
set /p ssss=请选择1或是2:
IF %ssss%==1 GOTO bcd
IF %ssss%==2 goto vhdexit
:bcd
set boot=c
set /p boot=请输入引导盘盘符(无需输入冒号,只需要写盘符即可,默认是C):
%windir%\system32\bcdboot %tardisk%:\windows /s %boot%: /f all /l zh-cn >nul 2>nul
echo select vdisk file="%addr%\%name%.%vhdfile%">%temp%\vdisk.txt
echo detach vdisk>>%temp%\vdisk.txt
echo exit>>%temp%\vdisk.txt
%windir%\system32\diskpart /s %temp%\vdisk.txt
echo 引导项添加完成.
goto checkboot
:vhdexit
del %temp%\vdisk.txt
echo select vdisk file="%addr%\%name%.%vhdfile%">%temp%\vdisk.txt
echo detach vdisk>>%temp%\vdisk.txt
echo exit>>%temp%\vdisk.txt
%windir%\system32\diskpart /s %temp%\vdisk.txt
echo 操作完成,即将退出!
ping -n 3 127.1 >nul
exit
:wimboot
cls
if /i "%PROCESSOR_IDENTIFIER:~0,3%" neq "X86" (pushd %~dp0dism64) else (pushd %~dp0dism86)
set cr=Wimboot启动方式部署系统(%environment%环境) %date% %time%
color 0b& title %cr%
echo.
echo # %cr% #
echo.
echo 请选择: 1.我没有现成的Wimboot映像(默认)          2.我有现成的Wimboot映像
set wim=1
set /p wim=
if %wim%==1 goto jixu
if %wim%==2 goto xiancheng
:jixu
echo 请将需要安装系统的ESD或WIM映像拖动到此处或复制路径并粘贴到此处:
set /p source=
if not defined source echo 没有发现系统映像,请按任意键重新开始. && pause >nul && goto jixu
if %windir% neq X:\Windows (if not exist "%source%" echo 没有发现系统映像,路径可能有错误,请按任意键重新开始. && pause >nul && goto jixu) else (if not exist %source% echo 没有发现系统映像,路径可能有错误,请按任意键重新开始. && pause >nul && goto jixu)
if not exist X:\Windows (dism /get-wiminfo /wimfile:"%source%") else (dism /get-wiminfo /wimfile:%source%)
if not exist X:\Windows (dism /get-wiminfo /wimfile:"%source%" | find "错误" > NUL &&  goto error) else ( dism /get-wiminfo /wimfile:%source% | find "错误" > NUL &&  goto error)
echo.
echo 请根据以上信息输入系统映像的索引号,如果这个映像只含有一个系统映像,直接输入1,默认值是1.
set num=1
set /p num=
echo 请选择wimboot映像保存的位置:
Folder "set d_temp=" "c:" "请选择wimboot映像保存的位置:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set addr=%d_temp:~1,-1%
if %addr%==%addr:~0,2%\ set addr=%addr:~0,2%
echo 请输入Wimboot映像的文件名(只需要输入文件名,无需加后缀):
set /p wjm=
cls
echo 正在制作wimboot映像到%addr%\%wjm%.wim
call :time_start
if not exist X:\Windows (Dism /Export-Image /WIMBoot /SourceImageFile:"%source%" /SourceIndex:%num% /DestinationImageFile:"%addr%\%wjm%.wim") else (Dism /Export-Image /WIMBoot /SourceImageFile:%source% /SourceIndex:%num% /DestinationImageFile:%addr%\%wjm%.wim)
call :time_end
echo wimboot映像的制作过程耗时%hour%小时%minute%分%second%秒.
set wimpath=%addr%\%wjm%.wim
goto fcontinue
:xiancheng
echo 请将您的Wimboot映像拖动到此处或者将其路径复制后粘贴到此处,并按回车:
set /p wimpath=
if not defined wimpath echo 没有发现系统映像,请按任意键重新开始. && pause >nul && goto xiancheng
if %windir% neq X:\Windows (if not exist "%wimpath%" echo 没有发现系统映像,路径可能有错误,请按任意键重新开始. && pause >nul && goto xiancheng) else (if not exist %wimpath% echo 没有发现系统映像包,路径可能有错误,请按任意键重新开始. && pause >nul && goto xiancheng)
goto fcontinue
:fcontinue
echo 请输入系统指针的目标盘盘符(不需要加冒号,直接输入盘符的字母即可):
set /p tar=
if not defined tar echo 您没有选择系统目标盘,请重新输入。 && pause >nul && goto fcontinue
if not exist %tar%: echo %tar%盘不存在,请重新输入! && goto fcontinue
echo 您选择的系统目标盘是:%tar%盘.
:wimbootreselect
echo 您的是否正确?选择“是(y)(默认)”则开始格式化目标盘并开始安装操作系统,选择“否(n)"则不格式化目标盘直接安装操作系统,输入“r”则重新选择目标盘.
set ID=y
set /p ID=
if "%id%"=="y" goto jixu1
if "%id%"=="n" goto wimbootinstall
if "%id%"=="r" goto fcontinue
echo 选择有错误,请重新选择,按任意键继续! && pause >nul && goto wimbootreselect
:jixu1
%windir%\system32\format %tar%: /q /y | find "格式化失败" > nul && goto formatfail
if exist %tar%:\$RECYCLE.BIN goto formatfail
echo 格式化成功!
:wimbootinstall
echo 请输入您的引导分区,如果你不希望处理引导,就选择一个不存在的分区盘符即可:
set /p boot=
echo 请选择Wimboot部署内核:  1.Dism      2.Wimlib(默认)
set core=2
set /p core=
cls
if %core%==1 (
if not exist %windir%\system32\drivers\wof.sys (
echo 检测到当前的系统环境不支持wimboot部署方案,正在先让系统支持wimboot......
copy /y wofadk.sys %windir%\system32\drivers\wofadk.sys >nul 2>nul
copy /y wof.sys %windir%\system32\drivers\wof.sys >nul 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\services\Wof" /f /v "DisplayName" /t REG_SZ /d "Windows Overlay File System Filter Driver" >nul 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\services\Wof" /f /v "ErrorControl" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\services\Wof" /f /v "Group" /t REG_SZ /d "FSFilter Compression" >nul 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\services\Wof" /f /v "Start" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\services\Wof" /f /v "Type" /t REG_DWORD /d 2 >nul 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\services\Wof" /f /v "DependOnService" /t REG_MULTI_SZ /d "FltMgr" >nul 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\services\Wof\Instances" /f /v "DefaultInstance" /t REG_SZ /d "Wof Instance" >nul 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\services\Wof\Instances\Wof Instance" /f /v "Altitude" /t REG_SZ /d "40700" >nul 2>nul
reg add "HKLM\SYSTEM\CurrentControlSet\services\Wof\Instances\Wof Instance" /f /v "Flags" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "Enabled" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "EnableLevel" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "LoggerName" /t REG_SZ /d "EventLog-System" >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "MatchAnyKeyword" /t REG_QWORD /d 128 >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "MatchAllKeyword" /t REG_QWORD /d 0 >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "EnableProperty" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\EventLog\SYSTEM\Microsoft-Windows-OverlayFilter" /f /v "ProviderGuid" /t REG_SZ /d "{46c78e5c-a213-46a8-8a6b-622f6916201d}" >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\EventLog\SYSTEM\Microsoft-Windows-OverlayFilter" /f /v "EventMessageFile" /t REG_EXPAND_SZ /d "%%SystemRoot%%\system32\drivers\wof.sys" >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\Wof" /f /v "DisplayName" /t REG_SZ /d "Windows Overlay File System Filter Driver" >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\Wof" /f /v "ErrorControl" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\Wof" /f /v "Group" /t REG_SZ /d "FSFilter Compression" >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\Wof" /f /v "Start" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\Wof" /f /v "Type" /t REG_DWORD /d 2 >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\Wof" /f /v "DependOnService" /t REG_MULTI_SZ /d "FltMgr" >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\Wof\Instances" /f /v "DefaultInstance" /t REG_SZ /d "Wof Instance" >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\Wof\Instances\Wof Instance" /f /v "Altitude" /t REG_SZ /d "40700" >nul 2>nul
reg add "HKLM\SYSTEM\ControlSet001\Services\Wof\Instances\Wof Instance" /f /v "Flags" /t REG_DWORD /d 0 >nul 2>nul
)
)
echo 开始安装操作系统到%tar%盘......
call :time_start
disableX.exe
if %core%==1 (
if not exist X:\Windows (
dism /Apply-Image /ImageFile:"%wimpath%" /ApplyDir:%tar%: /Index:1 /WIMBoot
) else (
dism /Apply-Image /ImageFile:%wimpath% /ApplyDir:%tar%: /Index:1 /WIMBoot
)
) else (
if not exist X:\Windows (
wimlib-imagex.exe apply "%wimpath%" 1 %tar%:\ --wimboot
) else (
wimlib-imagex.exe apply %wimpath% 1 %tar%:\ --wimboot
)
)
%windir%\system32\bcdboot.exe %tar%:\windows /s %boot%: /f all /l zh-cn >nul 2>nul
if exist %tar%:\windows\slui.exe label %tar%: Windows8.1企业版 >nul
if exist %tar%:\windows\system\silent.bat label %tar%: Windows7旗舰版 >nul
if exist "%tar%:\Program Files\Internet Explorer\ie8props.propdesc" (
call :windows7
)
call :time_end
echo 操作完成,安装系统共计用时%hour%小时%minute%分%second%秒。
if not defined boot echo 请按任意键退出。 && goto exit
goto checkboot
:BCDList
cls
mode con: cols=65 lines=25
color 0b
echo               系统引导项添加与修复
echo.
echo 本程序仅提供简单的系统引导的添加与修复,只能添加或修复VHD、常规的分区部署、Wimboot部署以及Compact部署的系统.
echo.
echo     程序项目:
echo     1.VHD引导项添加与修复          2.常规系统引导项添加与修复
echo.
set /p select=请选择你要操作的项目:
if %select%==1 (goto vhdaddBCD) else (
if %select%==2 (goto WindowsBCD) else (goto BCDList)
)
:vhdaddBCD
cls
title VHD引导项添加与修复
setlocal EnableDelayedExpansion
echo 请将需要添加引导的VHD虚拟硬盘映像拖动到此处或复制路径并粘贴到此处:
set /p vhdpath=
:vhdboot
echo 请输入引导分区(无需输入冒号,只需要写盘符即可,默认是C):
set boot=c
set /p boot=
if not exist %boot%:\ echo 该分区不存在,请重新输入. && goto vhdboot
echo select vdisk file="%vhdpath%">%temp%\vdisk.txt
echo attach vdiski>>%temp%\vdisk.txt
set a=0
for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z)do (
if not exist %%i: (
set /a a=a+1
if !a!==2 (
echo assign letter=%%i>>%temp%\vdisk.txt
set tardisk=%%i
goto _vdisk
)
)
)
:_vdisk
echo exit>>%temp%\vdisk.txt
%windir%\system32\diskpart /s %temp%\vdisk.txt
%windir%\system32\bcdboot.exe %tardisk%:\windows /s %boot%: /f all /l zh-cn >nul 2>nul
del %temp%\vdisk.txt
echo select vdisk file="%vhdpath%">%temp%\vdisk.txt
echo detach vdisk>>%temp%\vdisk.txt
echo exit>>%temp%\vdisk.txt
%windir%\system32\diskpart /s %temp%\vdisk.txt
goto checkboot
:WindowsBCD
cls
title 常规系统引导项添加与修复
echo 请输入系统所在分区(无需输入冒号,只需要写盘符即可):
set /p os=
if not defined os echo 你没有输入引导分区,请重新输入。 && goto WindowsBCD
if not exist %os%:\ echo 该分区不存在,请重新输入。 && goto WindowsBCD
:bootdisk
echo 请输入引导分区(不需要输入冒号,只需要写盘符即可,默认是C):
set boot=c
set /p boot=
if not exist %boot%:\ echo 该分区不存在,请重新输入。 && goto bootdisk
%windir%\system32\bcdboot.exe %os%:\windows /s %boot%: /f all /l zh-cn >nul 2>nul
:checkboot
echo 是否检查启动条目已经添加好了?  1.我要检查一下(默认)    2.不需要检查引导项,直接退出.
set check=1
set /p check=
if %check%==1 (
if %environment%==Windows (
msconfig -2
exit
) else ( bootice.exe /edit_bcd /easymode /file="%boot%:\boot\bcd" )
) else ( exit)
:scanhealth
mode con: cols=80 lines=30
echo.
echo 本程序可以补全安装系统时被精简掉的部分文件或强制修复安装系统后期被第三方程序破坏掉的系统,该程序需要在联网环境下整个过程才能正常工作,这个过程大约需要几十分钟到1个多小时,执行过程中不可以关闭窗口,您需要耐心等候,或者将窗口最小化进行其他操作.
echo.
echo 如果你已经了解上述内容并且想执行这个操作,请按任意键继续!
pause >nul
cls
if /i "%PROCESSOR_IDENTIFIER:~0,3%" neq "X86" (pushd %~dp0dism64) else (pushd %~dp0dism86)
DisableX.exe
echo 本过程分两个阶段共6个步骤分阶段执行,需要的时间较长,大约需要1个多小时,执行过程中不可以关闭窗口,您需要耐心等候,或者将窗口最小化进行其他操作,但请不要断开网络或者重新启动您的计算机!
echo.
echo 现在开始执行第一阶段的过程,请务必保持网络畅通!
echo.
echo 第一步:扫描系统
Dism /Online /Cleanup-Image /ScanHealth
echo.
echo 第二步:检查系统有无被损坏
Dism /Online /Cleanup-Image /CheckHealth
echo.
echo 第三步:强制修复系统核心组件
Dism /Online /Cleanup-image /RestoreHealth
echo.
echo 操作完成,请按任意键继续!
pause >nul
echo.
echo 现在准备执行第二阶段的过程,这个阶段的目的是清理掉Windows更新存储池的冗余部分,有助于提升您的系统盘的空间利用,但需要的时间较长,如果你需要执行这个过程,请输入y并继续(默认),输入n则自动关闭该窗口!
set c=y
set /p c=
if %c%==y goto clean
if %c%==n exit
:clean
echo 第一步:Windows更新存储池资源统计
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
echo.
echo 第二步:安全回收更新存储池空间
Dism.exe /online /Cleanup-Image /StartComponentCleanup
echo.
echo 第三步:固化Windows更新并深度回收更新存储池空间
Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
echo.
echo 操作完成,请按任意键退出!
goto exit
:converter
cls
ver | find "6.1." > NUL &&  goto fail
title ESD和WIM互转工具 %date% %time%
color b
if /i "%PROCESSOR_IDENTIFIER:~0,3%" neq "X86" (pushd %~dp0dism64) else (pushd %~dp0dism86)
echo.
ECHO ===============================================================================
echo 请注意:本程序处理的映像只能在ESD和WIM之间相互转换,如果你的源是WIM,则转换成ESD,如果你的源是ESD,则转换成WIM.
echo.
echo 请选择需要转换的系统映像ESD或WIM:
ECHO ===============================================================================
start /wait "" select.exe --Searchfile
call "%temp%\tmp.cmd"
del /a /f /q "%temp%\tmp.cmd"
if not defined wimfile goto converter
SET ERRORTEMP=
set /A count=0
dism /get-wiminfo /wimfile:"%WIMFILE%" >nul 2>&1 || (
echo.
echo 不正确的路径或文件,请按任意键退出!
goto exit
)
setlocal EnableDelayedExpansion
FOR /F "tokens=2 delims=: " %%i IN ('dism /english /Get-WimInfo /WimFile:"%WIMFILE%" ^| findstr "Index"') DO SET images=%%i
for /L %%i in (1, 1, %images%) do call :setcount %%i
if "%WIMFILE:~-3%"=="esd" GOTO :ESDMENU
if "%WIMFILE:~-3%"=="wim" GOTO :WIMMENU
exit
:setcount
set /A count+=1
for /f "tokens=1* delims=: " %%i in ('dism /english /get-wiminfo /wimfile:"%WIMFILE%" /index:%1 ^| find /i "Name"') do set name%count%="%%j"
goto :eof
:ESDMENU
cls
ECHO ===============================================================================
ECHO.                   检测到的ESD文件包含 %images% 个子映像,如下所示:
ECHO.
for /L %%i in (1, 1, %images%) do (
ECHO.  %%i. !name%%i!
)
ECHO.
ECHO ===============================================================================
ECHO.                                  菜单选项
ECHO ===============================================================================
ECHO.                   1 - 输出第一索引号的映像
ECHO.                   2 - 输出所有包含的映像
ECHO.                   3 - 输出选定的一个映像
ECHO.                   4 - 输出一个范围内所选定的映像
ECHO ===============================================================================
ECHO.                            按“Q”键退出
ECHO ===============================================================================
choice /c 1234q /n /m "请选择一个菜单选项,或按Q退出程序: "
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP%==1 GOTO :ESD1
IF %ERRORTEMP%==2 GOTO :ESD2
IF %ERRORTEMP%==3 GOTO :ESD3
IF %ERRORTEMP%==4 GOTO :ESD4
IF %ERRORTEMP%==5 exit
GOTO :MAINMENU
:ESD1
cls
echo 选择映像导出路径:
%~dp0Folder "set d_temp=" "d:" "选择映像导出路径:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set dir=%d_temp:~1,-1%
set /p name=请输入你要保存的文件名(无需加文件名后缀,只需要输入文件名即可):
IF EXIST "%dir%\%name%.wim" (
ECHO ===============================================================================
ECHO.  一个 %name%.wim 文件已经在当前目录存在!
ECHO ===============================================================================
ECHO.
echo 操作完成,请按任意键退出!
goto exit
)
ECHO ===============================================================================
Echo 正在导出ESD映像的第一子映像到一个新的 %name%.wim 文件...
ECHO ===============================================================================
call :time_start
disableX.exe
mkdir temp
dism /Quiet /Capture-Image /ImageFile:"%dir%\%name%.wim" /CaptureDir:.\temp /Name:container /Compress:max /CheckIntegrity
rmdir /s /q temp
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:1 /DestinationImageFile:"%dir%\%name%.wim" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在处理过程中程序发生错误!&PAUSE&exit)
dism /Quiet /Delete-Image /ImageFile:"%dir%\%name%.wim" /Index:1 /CheckIntegrity
echo.
echo 处理完成......
echo.
call :time_end
echo 操作完成,映像导出在"%dir%\%name%.wim",导出过程耗时%hour%小时%minute%分%second%秒,请按任意键退出!
goto exit
:ESD2
cls
echo 选择映像导出路径:
%~dp0Folder "set d_temp=" "d:" "选择映像导出路径:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set dir=%d_temp:~1,-1%
set /p name=请输入你要保存的文件名(无需加文件名后缀,只需要输入文件名即可):
IF EXIST "%dir%\%name%.wim" (
ECHO ===============================================================================
ECHO.  一个 %name%.wim 文件已经在当前目录存在!
ECHO ===============================================================================
ECHO.
echo 操作完成,请按任意键退出!
goto exit
)
ECHO ===============================================================================
Echo 正在输出 ESD 的第一子映像到一个新的 %name%.wim 文件
ECHO ===============================================================================
call :time_start
disableX.exe
mkdir temp
dism /Quiet /Capture-Image /ImageFile:"%dir%\%name%.wim" /CaptureDir:.\temp /Name:container /Compress:max /CheckIntegrity
rmdir /s /q temp
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:1 /DestinationImageFile:"%dir%\%name%.wim" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在处理过程中程序发生错误!&PAUSE&exit)
dism /Quiet /Delete-Image /ImageFile:"%dir%\%name%.wim" /Index:1 /CheckIntegrity
if "%images%"=="1" (call :timecalc)
for /L %%i in (2, 1, %images%) do (
ECHO.
ECHO ===============================================================================
Echo 正在导出 ESD的第%%i子映像到 %name%.wim 文件...
ECHO ===============================================================================
call :time_start
disableX.exe
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:%%i /DestinationImageFile:"%dir%\%name%.wim" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在处理过程中程序发生错误!&PAUSE&exit)
)
echo.
echo 处理完成......
echo.
call :time_end
echo 操作完成,映像导出在"%dir%\%name%.wim",导出过程耗时%hour%小时%minute%分%second%秒,请按任意键退出!
goto exit
:ESD3
cls
set _index=
ECHO ===============================================================================
ECHO.                   检测到的ESD文件包含 %images% 个子映像,如下所示:
ECHO.
for /L %%i in (1, 1, %images%) do (
ECHO.  %%i. !name%%i!
)
ECHO.
ECHO ===============================================================================
ECHO.                     输入所需要导出的子映像索引号
ECHO ===============================================================================
ECHO.                     输入数字0则返回主菜单
ECHO ===============================================================================
set /p _index= ^>
if /i "%_index%"=="0" goto :ESDMENU
if [%_index%]==[] goto :ESD3
if /i %_index% GTR %images% echo.&echo 选择的数字超出了索引号范围!&echo.&PAUSE&goto :ESD3
cls
echo 选择映像导出路径:
%~dp0Folder "set d_temp=" "d:" "选择映像导出路径:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set dir=%d_temp:~1,-1%
set /p name=请输入你要保存的文件名(无需加文件名后缀,只需要输入文件名即可):
IF EXIST "%dir%\%name%.wim" (
ECHO ===============================================================================
ECHO.  一个 %name%.wim 文件已经在当前目录存在!
ECHO ===============================================================================
ECHO.
echo 操作完成,请按任意键退出!
goto exit
)
ECHO ===============================================================================
Echo 正在输出 ESD 的第%_index%子映像到一个新的 %name%.wim 文件...
ECHO ===============================================================================
call :time_start
disableX.exe
mkdir temp
dism /Quiet /Capture-Image /ImageFile:"%dir%\%name%.wim" /CaptureDir:.\temp /Name:container /Compress:max /CheckIntegrity
rmdir /s /q temp
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:%_index% /DestinationImageFile:"%dir%\%name%.wim" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在导出过程中dism发生错误!&PAUSE&exit)
dism /Quiet /Delete-Image /ImageFile:"%dir%\%name%.wim" /Index:1 /CheckIntegrity
echo.
echo 处理完成......
echo.
call :time_end
echo 操作完成,映像导出在"%dir%\%name%.wim",导出过程耗时%hour%小时%minute%分%second%秒,请按任意键退出!
goto exit
:ESD4
cls
set _range=
set _start=
set _end=
ECHO ===============================================================================
ECHO.                   检测到的ESD文件包含 %images% 个子映像,如下所示:
ECHO.
for /L %%i in (1, 1, %images%) do (
ECHO.  %%i. !name%%i!
)
ECHO.
ECHO ===============================================================================
ECHO.              输入所需要导出的子映像索引号:开始-结束
ECHO.                          示例: 2-4 or 1-3 or 3-4
ECHO ===============================================================================
ECHO.                      输入数字0则返回主菜单
ECHO ===============================================================================
set /p _range= ^>
if /i "%_range%"=="0" goto :ESDMENU
if [%_range%]==[] goto :ESD4
for /f "tokens=1 delims=-" %%i in ('echo %_range%') do set _start=%%i
for /f "tokens=2 delims=-" %%i in ('echo %_range%') do set _end=%%i
if /i %_start% GTR %images% echo.&echo 索引号起始值超出映像说包含的索引号最大值!&echo.&PAUSE&goto :ESD4
if /i %_end% GTR %images% echo.&echo 索引号结束值超出映像说包含的索引号最大值!&echo.&PAUSE&goto :ESD4
if /i %_start% EQU %_end% echo.&echo 起始值和结束值相等,请使用主菜单的选项3来导出单一个索引号映像!&echo.&PAUSE&goto :ESDMENU
cls
echo 选择映像导出路径:
%~dp0Folder "set d_temp=" "d:" "选择映像导出路径:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set dir=%d_temp:~1,-1%
set /p name=请输入你要保存的文件名(无需加文件名后缀,只需要输入文件名即可):
IF EXIST "%dir%\%name%.wim" (
ECHO ===============================================================================
ECHO.  一个 %name%.wim 文件已经在当前目录存在!
ECHO ===============================================================================
ECHO.
echo 操作完成,请按任意键退出!
goto exit
)
ECHO ===============================================================================
Echo 正在输出 ESD 的第%_start%子映像到一个新的 %name%.wim 文件...
ECHO ===============================================================================
call :time_start
disableX.exe
mkdir temp
dism /Quiet /Capture-Image /ImageFile:"%dir%\%name%.wim" /CaptureDir:.\temp /Name:container /Compress:max /CheckIntegrity
rmdir /s /q temp
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:%_start% /DestinationImageFile:"%dir%\%name%.wim" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在导出过程中dism发生错误!&PAUSE&exit)
dism /Quiet /Delete-Image /ImageFile:"%dir%\%name%.wim" /Index:1 /CheckIntegrity
set /a _start+=1
for /L %%i in (%_start%, 1, %_end%) do (
ECHO.
ECHO ===============================================================================
Echo 正在输出 ESD 的第 %%i 子映像到 %name%.wim 文件...
ECHO ===============================================================================
disableX.exe
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:%%i /DestinationImageFile:"%dir%\%name%.wim" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在导出过程中dism发生错误!&PAUSE&exit)
)
echo.
echo 处理完成......
echo.
call :time_end
echo 操作完成,映像导出在"%dir%\%name%.wim",导出过程耗时%hour%小时%minute%分%second%秒,请按任意键退出!
goto exit
:WIMMENU
cls
ECHO ===============================================================================
ECHO.                   检测到的wim文件包含 %images% 个子映像,如下所示:
ECHO.
for /L %%i in (1, 1, %images%) do (
ECHO.  %%i. !name%%i!
)
ECHO.
ECHO ===============================================================================
ECHO.                                  菜单选项
ECHO ===============================================================================
ECHO.                   1 - 输出第一索引号的映像
ECHO.                   2 - 输出所有包含的映像
ECHO.                   3 - 输出选定的一个映像
ECHO.                   4 - 输出一个范围内所选定的映像
ECHO ===============================================================================
ECHO.                            按“Q”键退出
ECHO ===============================================================================
choice /c 1234q /n /m "请选择一个菜单选项,或按Q退出程序: "
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP%==1 GOTO :WIM1
IF %ERRORTEMP%==2 GOTO :WIM2
IF %ERRORTEMP%==3 GOTO :WIM3
IF %ERRORTEMP%==4 GOTO :WIM4
IF %ERRORTEMP%==5 exit
GOTO :MAINMENU
:WIM1
cls
echo 选择映像导出路径:
%~dp0Folder "set d_temp=" "d:" "选择映像导出路径:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set dir=%d_temp:~1,-1%
set /p name=请输入你要保存的文件名(无需加文件名后缀,只需要输入文件名即可):
IF EXIST "%dir%\%name%.esd" (
ECHO ===============================================================================
ECHO.  一个 %name%.esd 文件已经在当前目录存在!
ECHO ===============================================================================
ECHO.
echo 操作完成,请按任意键退出!
goto exit
)
ECHO ===============================================================================
Echo 正在导出 WIM 的第一子映像到一个新的 %name%.esd 文件...
ECHO ===============================================================================
call :time_start
disableX.exe
echo.
echo *** 这可能需要很久的时间,并且CPU和RAM会被极大的占用,您的计算机在此期间可能会出现卡顿甚至停止响应,请耐心等待处理完成,不要因此而关闭计算机!请耐心等候......
echo.
dism /export-image /sourceimagefile:"%WIMFILE%" /Sourceindex:1 /destinationimagefile:"%dir%\%name%.esd" /compress:recovery /checkintegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在处理过程中程序发生错误!&PAUSE&exit)
echo.
echo 处理完成......
echo.
call :time_end
echo 操作完成,映像导出在"%dir%\%name%.esd",导出过程耗时%hour%小时%minute%分%second%秒,请按任意键退出!
goto exit
:WIM2
cls
echo 选择映像导出路径:
%~dp0Folder "set d_temp=" "d:" "选择映像导出路径:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set dir=%d_temp:~1,-1%
set /p name=请输入你要保存的文件名(无需加文件名后缀,只需要输入文件名即可):
IF EXIST "%dir%\%name%.esd" (
ECHO ===============================================================================
ECHO.  一个 %name%.esd 文件已经在当前目录存在!
ECHO ===============================================================================
ECHO.
echo 操作完成,请按任意键退出!
goto exit
)
ECHO ===============================================================================
Echo 正在导出 WIM 的第一子映像到一个新的 %name%.esd 文件...
ECHO ===============================================================================
call :time_start
disableX.exe
echo.
echo *** 这可能需要很久的时间,并且CPU和RAM会被极大的占用,您的计算机在此期间可能会出现卡顿甚至停止响应,请耐心等待处理完成,不要因此而关闭计算机!请耐心等候......
echo.
dism /Export-Image /SourceImageFile:"%WIMFILE%" /Sourceindex:1 /DestinationImageFile:"%dir%\%name%.esd" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在处理过程中程序发生错误!&PAUSE&exit)
if "%images%"=="1" (
call :timecalc
)
for /L %%i in (2, 1, %images%) do (
ECHO.
ECHO ===============================================================================
Echo 正在导出 WIM 的第 %%i 子映像到 %name%.esd 文件...
ECHO ===============================================================================
call :time_start
disableX.exe
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:%%i /DestinationImageFile:"%dir%\%name%.esd" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在处理过程中程序发生错误!&PAUSE&exit)
)
echo.
echo 处理完成......
echo.
call :time_end
echo 操作完成,映像导出在"%dir%\%name%.esd",导出过程耗时%hour%小时%minute%分%second%秒,请按任意键退出!
goto exit
:WIM3
cls
set _index=
ECHO ===============================================================================
ECHO.                   检测到的wim文件包含 %images% 个子映像,如下所示:
ECHO.
for /L %%i in (1, 1, %images%) do (
ECHO.  %%i. !name%%i!
)
ECHO.
ECHO ===============================================================================
ECHO.                     输入所需要导出的子映像索引号
ECHO ===============================================================================
ECHO.                     输入数字0则返回主菜单
ECHO ===============================================================================
set /p _index= ^>
if /i "%_index%"=="0" goto :WIMMENU
if [%_index%]==[] goto :WIM3
if /i %_index% GTR %images% echo.&echo 选择的数字超出了索引号范围!&echo.&PAUSE&goto :WIM3
cls
echo 选择映像导出路径:
%~dp0Folder "set d_temp=" "d:" "选择映像导出路径:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set dir=%d_temp:~1,-1%
set /p name=请输入你要保存的文件名(无需加文件名后缀,只需要输入文件名即可):
IF EXIST "%dir%\%name%.esd" (
ECHO ===============================================================================
ECHO.  一个 %name%.esd 文件已经在当前目录存在!
ECHO ===============================================================================
ECHO.
echo 操作完成,请按任意键退出!
goto exit
)
ECHO ===============================================================================
Echo 正在导出 WIM 的第 %_index% 子映像到一个新的 %name%.esd 文件...
ECHO ===============================================================================
call :time_start
disableX.exe
echo.
echo *** 这可能需要很久的时间,并且CPU和RAM会被极大的占用,您的计算机在此期间可能会出现卡顿甚至停止响应,请耐心等待处理完成,不要因此而关闭计算机!请耐心等候......
echo.
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:%_index% /DestinationImageFile:"%dir%\%name%.esd" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在处理过程中程序发生错误!&PAUSE&exit)
echo.
echo 处理完成......
echo.
call :time_end
echo 操作完成,映像导出在"%dir%\%name%.esd",导出过程耗时%hour%小时%minute%分%second%秒,请按任意键退出!
goto exit
:WIM4
cls
set _range=
set _start=
set _end=
ECHO ===============================================================================
ECHO.                   检测到的wim文件包含 %images% 个子映像,如下所示:
ECHO.
for /L %%i in (1, 1, %images%) do (
ECHO.  %%i. !name%%i!
)
ECHO.
ECHO ===============================================================================
ECHO.              输入所需要导出的子映像索引号:开始-结束
ECHO.                          示例: 2-4 or 1-3 or 3-4
ECHO ===============================================================================
ECHO.                      输入数字0则返回主菜单
ECHO ===============================================================================
set /p _range= ^>
if /i "%_range%"=="0" goto :WIMMENU
if [%_range%]==[] goto :WIM4
for /f "tokens=1 delims=-" %%i in ('echo %_range%') do set _start=%%i
for /f "tokens=2 delims=-" %%i in ('echo %_range%') do set _end=%%i
if /i %_start% GTR %images% echo.&echo 索引号起始值超出映像说包含的索引号最大值!&echo.&PAUSE&goto :WIM4
if /i %_end% GTR %images% echo.&echo 索引号结束值超出映像说包含的索引号最大值!&echo.&PAUSE&goto :WIM4
if /i %_start% EQU %_end% echo.&echo 起始值和结束值相等,请使用主菜单的选项3来导出单一个索引号映像!&echo.&PAUSE&goto :WIMMENU
cls
echo 选择映像导出路径:
%~dp0Folder "set d_temp=" "d:" "选择映像导出路径:" >%temp%\a.bat
call %temp%\a.bat
del %temp%\a.bat>nul
set dir=%d_temp:~1,-1%
set /p name=请输入你要保存的文件名(无需加文件名后缀,只需要输入文件名即可):
IF EXIST "%dir%\%name%.esd" (
ECHO ===============================================================================
ECHO.  一个 %name%.esd 文件已经在当前目录存在!
ECHO ===============================================================================
ECHO.
echo 操作完成,请按任意键退出!
goto exit
)
ECHO ===============================================================================
Echo 正在导出 WIM 的第 %_start% 子映像到一个新的 %name%.esd 文件...
ECHO ===============================================================================
call :time_start
disableX.exe
echo.
echo *** 这可能需要很久的时间,并且CPU和RAM会被极大的占用,您的计算机在此期间可能会出现卡顿甚至停止响应,请耐心等待处理完成,不要因此而关闭计算机!请耐心等候......
echo.
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:%_start% /DestinationImageFile:"%dir%\%name%.esd" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在处理过程中程序发生错误!&PAUSE&exit)
set /a _start+=1
for /L %%i in (%_start%, 1, %_end%) do (
ECHO.
ECHO ===============================================================================
Echo 正在导出 WIM 的第 %%i 子映像到 %name%.esd 文件...
ECHO ===============================================================================
disableX.exe
dism /Export-Image /SourceImageFile:"%WIMFILE%" /SourceIndex:%%i /DestinationImageFile:"%dir%\%name%.esd" /compress:recovery /CheckIntegrity
SET ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (ECHO.&Echo 在处理过程中程序发生错误!&PAUSE&exit)
)
echo.
echo 处理完成......
echo.
call :time_end
echo 操作完成,映像导出在"%dir%\%name%.esd",导出过程耗时%hour%小时%minute%分%second%秒,请按任意键退出!
goto exit
:help
mode con: cols=101 lines=40
cls
echo 功能详解:
echo dism命令行部署系统:
echo 常规的系统部署方式,部署到某一个分区下面,支持Windows Vista及以上的所有系统安装;
echo.
if not exist X:\Windows (echo esd和wim映像相互转换:
echo 映像的格式转换程序,仅支持wim和esd的映像之间互转,并且都以最大压缩率进行转换,当esd转换到wim的时候会比较轻松,但是,当从wim转换成esd的话会比较费电脑资源,你的计算机可能会卡死,并且转换过程中程序无法停止,除非你强制重启,因此在操作之前你需要确定是否要这样做,如果你觉得以这样的方式转换不方便,你可以使用dism^+^+的映像转换功能,这个功能在Windows7及以上操作系统受支持;
)
echo.
echo 命令行创建VHD:
echo 使用命令行来创建一个VHD虚拟硬盘文件映像来部署操作系统,支持VHD和VHDX的创建,VHD支持Win7及以上所有操作系统,VHDX支持Win8及以上操作系统,这个功能在Windows7及以上操作系统受支持;
echo.
echo 采用wimboot启动方式部署系统:
echo 在Windows8.1 update以后出现的新一种部署方式,在很大程度上节省了磁盘空间,但是需要一个wimboot压缩格式的wim映像,如果没有wimboot映像文件,你需要先创建一个wimboot映像文件,如果有,可以直接wimboot部署系统,这个功能在Windows8.1 update及以上操作系统才会受到很好的支持;在Win7系统以上的环境可能效果不是很好,对于Windows7系统,需要wimboot的话需要经过特殊处理,具体参照教程;
echo.
if not exist X:\Windows (echo 系统健康检查并强制修复系统核心组件:
echo 可以补全安装系统时被精简掉的部分文件或强制修复安装系统后期被第三方程序破坏掉的系统,该程序需要在联网环境下整个过程才能正常工作,这个过程大约需要几十分钟到1个多小时,执行过程中不可以关闭窗口,您需要耐心等候,这个功能支持Windows7及以上所有操作系统.
)
echo.
echo 如果你已经了解上述信息,按任意键返回主菜单.
pause >nul
cls
goto mainstart
:admin
CLS
MODE con: COLS=40 LINES=7
echo.
ECHO 程序因为没有管理员权限而导致无法运行.
echo 请右键“以管理员身份运行”
ECHO 请按任意键退出...
goto exit
:fail
2#
 楼主| 发表于 2015-6-13 22:25:04 | 只看该作者
CLS
MODE con: COLS=40 LINES=7
echo 您当前的操作系统无法正常地运行这个程序或功能,请在NT6.2及更高版本的系统上运行这个程序!
goto exit
:timecalc
echo.
echo 处理完成......
echo.
call :time_end
echo 操作完成,映像导出过程耗时%hour%小时%minute%分%second%秒,请按任意键退出.
goto exit
:formatfail
echo 格式化失败,请手动格式化该分区后重新运行该程序,请按任意键退出.
goto exit
:error
echo.
echo 程序发生错误,请参考上面显示的信息进行解决,请按任意键退出.
:exit
pause >nul
exit
:windows7
echo 检测到部署的目标系统是Windows7,安装程序还需要进行后续处理,请稍候......
if exist %tar%:\windows\syswow64 (set ARCH=64) else (set ARCH=32)
if not exist %tar%:\windows\system32\drivers\wofadk.sys copy /y wofadk%arch%.sys %tar%:\windows\system32\drivers\wofadk.sys >nul 2>nul
if not exist %tar%:\windows\system32\drivers\wof.sys copy /y wof.sys %tar%:\windows\system32\drivers\wof.sys >nul 2>nul
reg load HKLM\temp %tar%:\Windows\System32\config\SYSTEM >nul 2>nul
reg add "HKLM\temp\ControlSet001\services\Wof" /f /v "DisplayName" /t REG_SZ /d "Windows Overlay File System Filter Driver" >nul 2>nul
reg add "HKLM\temp\ControlSet001\services\Wof" /f /v "ErrorControl" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\temp\ControlSet001\services\Wof" /f /v "Group" /t REG_SZ /d "FSFilter Compression" >nul 2>nul
reg add "HKLM\temp\ControlSet001\services\Wof" /f /v "Start" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet001\services\Wof" /f /v "Type" /t REG_DWORD /d 2 >nul 2>nul
reg add "HKLM\temp\ControlSet001\services\Wof" /f /v "DependOnService" /t REG_MULTI_SZ /d "FltMgr" >nul 2>nul
reg add "HKLM\temp\ControlSet001\services\Wof\Instances" /f /v "DefaultInstance" /t REG_SZ /d "Wof Instance" >nul 2>nul
reg add "HKLM\temp\ControlSet001\services\Wof\Instances\Wof Instance" /f /v "Altitude" /t REG_SZ /d "40700" >nul 2>nul
reg add "HKLM\temp\ControlSet001\services\Wof\Instances\Wof Instance" /f /v "Flags" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet002\services\Wof" /f /v "DisplayName" /t REG_SZ /d "Windows Overlay File System Filter Driver" >nul 2>nul
reg add "HKLM\temp\ControlSet002\services\Wof" /f /v "ErrorControl" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\temp\ControlSet002\services\Wof" /f /v "Group" /t REG_SZ /d "FSFilter Compression" >nul 2>nul
reg add "HKLM\temp\ControlSet002\services\Wof" /f /v "Start" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet002\services\Wof" /f /v "Type" /t REG_DWORD /d 2 >nul 2>nul
reg add "HKLM\temp\ControlSet002\services\Wof" /f /v "DependOnService" /t REG_MULTI_SZ /d "FltMgr" >nul 2>nul
reg add "HKLM\temp\ControlSet002\services\Wof\Instances" /f /v "DefaultInstance" /t REG_SZ /d "Wof Instance" >nul 2>nul
reg add "HKLM\temp\ControlSet002\services\Wof\Instances\Wof Instance" /f /v "Altitude" /t REG_SZ /d "40700" >nul 2>nul
reg add "HKLM\temp\ControlSet002\services\Wof\Instances\Wof Instance" /f /v "Flags" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "Enabled" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "EnableLevel" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "LoggerName" /t REG_SZ /d "EventLog-System" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "MatchAnyKeyword" /t REG_QWORD /d 128 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "MatchAllKeyword" /t REG_QWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Control\WMI\Autologger\EventLog-s\{46c78e5c-a213-46a8-8a6b-622f6916201d}" /f /v "EnableProperty" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\EventLog\temp\Microsoft-Windows-OverlayFilter" /f /v "ProviderGuid" /t REG_SZ /d "{46c78e5c-a213-46a8-8a6b-622f6916201d}" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\EventLog\temp\Microsoft-Windows-OverlayFilter" /f /v "EventMessageFile" /t REG_EXPAND_SZ /d "%%SystemRoot%%\system32\drivers\wof.sys" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\Wof" /f /v "DisplayName" /t REG_SZ /d "Windows Overlay File System Filter Driver" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\Wof" /f /v "ErrorControl" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\Wof" /f /v "Group" /t REG_SZ /d "FSFilter Compression" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\Wof" /f /v "Start" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\Wof" /f /v "Type" /t REG_DWORD /d 2 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\Wof" /f /v "DependOnService" /t REG_MULTI_SZ /d "FltMgr" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\Wof\Instances" /f /v "DefaultInstance" /t REG_SZ /d "Wof Instance" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\Wof\Instances\Wof Instance" /f /v "Altitude" /t REG_SZ /d "40700" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\Wof\Instances\Wof Instance" /f /v "Flags" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "DebugFlags" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "DependOnService" /t REG_MULTI_SZ /d "FltMgr" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "Discription" /t REG_SZ /d "WofAdk Mini-Filter Driver" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "DisplayName" /t REG_SZ /d "WofAdk" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "ErrorControl" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "Group" /t REG_SZ /d "FSFilter Compression" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "ImagePath" /t REG_EXPAND_SZ /d "\SystemRoot\system32\drivers\WofAdk.sys" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "AutoAttach" /t REG_DWORD /d 1 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "Start" /t REG_DWORD /d 0 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "SupportedFeatures" /t REG_DWORD /d 3 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "Tag" /t REG_DWORD /d 2 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk" /f /v "Type" /t REG_DWORD /d 2 >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk\Instances" /f /v "DefaultInstance" /t REG_SZ /d "WofAdk Instance" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk\Instances\WofAdk Instance" /f /v "Altitude" /t REG_SZ /d "40730" >nul 2>nul
reg add "HKLM\temp\ControlSet001\Services\WofAdk\Instances\WofAdk Instance" /f /v "Flags" /t REG_DWORD /d 0 >nul 2>nul
reg unload HKLM\temp >nul 2>nul
goto :eof
:time_start
set _time_start=%time%
set /a hour_start=%_time_start:~0,2%
set /a minute_start=1%_time_start:~3,2%-100
set /a second_start=1%_time_start:~6,2%-100
goto :eof
:time_end
set _time_end=%time%
set /a hour_end=%_time_end:~0,2%
set /a minute_end=1%_time_end:~3,2%-100
set /a second_end=1%_time_end:~6,2%-100
if %second_end% lss %second_start% (
set /a second_end=%second_end%+60
set /a minute_end=%minute_end%-1
)
set /a second=%second_end%-%second_start%
if %minute_end% lss %minute_start% (
set /a minute_end=%minute_end%+60
set /a hour_end=%hour_end%-1
)
set /a minute=%minute_end%-%minute_start%
if %hour_end% lss %hour_start% (
set /a hour_end=%hour_end%+24
)
set /a hour=%hour_end%-%hour_start%
回复

使用道具 举报

3#
 楼主| 发表于 2015-6-13 22:58:13 | 只看该作者

2015-06-11_222904.png (22.28 KB, 下载次数: 49)

2015-06-11_222904.png

2015-06-11_223048.png (23.94 KB, 下载次数: 50)

2015-06-11_223048.png

2015-06-11_222945.png (34.41 KB, 下载次数: 52)

2015-06-11_222945.png
回复

使用道具 举报

4#
发表于 2015-6-13 23:09:07 | 只看该作者
感谢分享……学习了!
回复

使用道具 举报

5#
 楼主| 发表于 2015-6-13 23:09:59 | 只看该作者
回复

使用道具 举报

6#
发表于 2015-6-13 23:19:18 | 只看该作者
支持一个,学习了
回复

使用道具 举报

7#
发表于 2015-6-14 06:28:24 来自手机 | 只看该作者
这个看着头疼
回复

使用道具 举报

8#
发表于 2015-6-14 06:54:13 | 只看该作者
看不懂了,看来还的学习呀。
回复

使用道具 举报

9#
发表于 2015-6-14 07:47:37 | 只看该作者
到3楼终于看见要的效果了
回复

使用道具 举报

10#
发表于 2015-6-15 11:32:42 | 只看该作者
开发作者是懒得勤快大师跟微软官方啥关系??
回复

使用道具 举报

11#
 楼主| 发表于 2015-6-15 11:50:38 来自手机 | 只看该作者
指来自于微软官方的dism工具,dism.exe,非第三方软件,批处理只不过是它的命令及用法
回复

使用道具 举报

12#
 楼主| 发表于 2015-6-15 11:52:29 来自手机 | 只看该作者
是基于微软官方工具dism
回复

使用道具 举报

13#
 楼主| 发表于 2015-6-15 12:14:55 来自手机 | 只看该作者
而且所有命令都是人家设好的,我们只不过输入而已,批处理就是逐步输入
回复

使用道具 举报

14#
 楼主| 发表于 2015-6-15 12:17:11 来自手机 | 只看该作者
所有命令是人家开发的设好的,我们只属于调度
回复

使用道具 举报

15#
 楼主| 发表于 2015-6-15 12:20:07 来自手机 | 只看该作者
我也不解释那么多了,我觉得它就应该叫Microsoft Windows DISM
回复

使用道具 举报

16#
 楼主| 发表于 2015-6-15 12:21:45 来自手机 | 只看该作者
这种开发不同于第三方软件
回复

使用道具 举报

17#
 楼主| 发表于 2015-6-15 12:29:27 | 只看该作者
99%的软件文件都是微软的东西,你叫我怎么命名吗,就像一台小米手机,它是由小米设计的,交给富士康安装,但他还是就小米手机,而不是富士康手机,微软的DISM,软件文件和命令都是人家设计好的,由我们来装卸,它当然是。。。,当然装卸方法很多
回复

使用道具 举报

18#
 楼主| 发表于 2015-6-15 12:35:57 来自手机 | 只看该作者
不喜勿喷,等我火了,kcyou不要下载我的东西
回复

使用道具 举报

19#
 楼主| 发表于 2015-6-15 12:37:18 来自手机 | 只看该作者
这年头发表点什么都招人说,免费提供不说,还要被指手画脚,坑爹啊
回复

使用道具 举报

20#
 楼主| 发表于 2015-6-17 10:33:36 来自手机 | 只看该作者
关于如何添加dism.exe命令正常运行的dll和dll.mui文件,用破解编译程序打开dism.exe,在里面会有支持文件
回复

使用道具 举报

21#
 楼主| 发表于 2015-6-17 10:34:59 来自手机 | 只看该作者
添加dism.exe命令正常运行的dll和dll.mui的支持文件
回复

使用道具 举报

22#
 楼主| 发表于 2015-6-17 10:36:05 来自手机 | 只看该作者
用某些编译程序打开,里面一般会有支持文件名单
回复

使用道具 举报

23#
发表于 2015-7-19 20:25:53 | 只看该作者

  1. :time_start
  2. set _time_start=%time%
  3. set /a hour_start=%_time_start:~0,2%
  4. set /a minute_start=1%_time_start:~3,2%-100
  5. set /a second_start=1%_time_start:~6,2%-100
  6. goto :eof
  7. :time_end
  8. set _time_end=%time%
  9. set /a hour_end=%_time_end:~0,2%
  10. set /a minute_end=1%_time_end:~3,2%-100
  11. set /a second_end=1%_time_end:~6,2%-100
  12. if %second_end% lss %second_start% (
  13. set /a second_end=%second_end%+60
  14. set /a minute_end=%minute_end%-1
  15. )
  16. set /a second=%second_end%-%second_start%
  17. if %minute_end% lss %minute_start% (
  18. set /a minute_end=%minute_end%+60
  19. set /a hour_end=%hour_end%-1
  20. )
  21. set /a minute=%minute_end%-%minute_start%
  22. if %hour_end% lss %hour_start% (
  23. set /a hour_end=%hour_end%+24
  24. )
  25. set /a hour=%hour_end%-%hour_start%
复制代码

看到这一段,我就笑了,一个时间截取,在附值时前面加一个1 再运算符减一百把1消灭,来扰别人的视觉,有意思吗?
当结束时间小于开始时间,秒借分,分减一,分借时,时减一,写出来一大篇 实际是花哨
整篇批处理下来,起作用就那么几个命令,搞得七哩八哩一大堆
回复

使用道具 举报

24#
 楼主| 发表于 2015-8-22 17:34:33 来自手机 | 只看该作者
DISM处理脚本,欢迎大家学习
回复

使用道具 举报

25#
发表于 2015-8-22 21:52:30 | 只看该作者
这个也不是微软官方的啊
回复

使用道具 举报

26#
 楼主| 发表于 2015-8-22 23:16:39 来自手机 | 只看该作者
Dism是微软开发出来的
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-30 19:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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