@echo off
Title DISM Export
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
rem pushd "%CD%"
rem CD /D "%~dp0"
:--------------------------------------
set dism=DISM.exe
if exist X:\sources\DISM.exe set dism=X:\sources\DISM.exe
%dism% /English /Get-WimInfo /WimFile:%1
:indextoexport
echo.
echo Введите порядковые номера для экспорта
echo Например: 1 2 3 4 5
echo Например: 1-5
set /p wimlist= ^>
if "%wimlist%"=="" (
echo 1
set "wimlist=1"
)
echo.
:destwim
echo.
echo Введите имя для сохранения файла wim\esd (без расширения .wim или .esd)
set /p dest= ^>
if [%dest%]==[] (
echo error!
goto :destwim
)
echo.
set setnames=no
echo.
echo Вы хотите установить новые имена образов?
echo Нажмите 'Enter' Нет, или 'у' ДА
set /p setnames= ^>
if [%setnames%]==[] set setnames=no
if [%setnames%]==[y] set setnames=yes
echo.
echo Нажмите 'Enter', чтобы установить максимальное (WIM) сжатие
echo Введите 'r' и нажмите 'Enter', чтобы установить recovery (ESD) сжатие
set /p compression= ^>
if [%compression%]==[] set compression2=max
if [%compression%]==[r] set compression2=recovery
if [%compression%]==[] set ext=wim
if [%compression%]==[r] set ext=esd
echo.
set _end=null
for /f "tokens=2 delims=-" %%i in ('echo %wimlist%') do set _end=%%i
if not %_end%==null goto :2
FOR %%i IN (%wimlist%) DO (
if %setnames%==yes (
setlocal enabledelayedexpansion
%dism% /English /Get-WimInfo /WimFile:"%1" /Index:%%i
echo Введите новое имя индекса:
set /p indexname= ^>
echo.
echo Новое имя индекса: !indexname!
timeout /t 5
echo.
echo Экспорт индекса: %%i
echo Сжатие: %compression2% ^(%ext%^)
%dism% /English /Export-Image /SourceIndex:%%i /SourceImageFile:"%1" /DestinationImageFile:"%dest%.%ext%" /DestinationName:"!indexname!" /compress:%compression2%
) ELSE (
echo Экспорт индекса: %%i
echo Сжатие: %compression2% ^(%ext%^)
%dism% /English /Export-Image /SourceIndex:%%i /SourceImageFile:%1 /DestinationImageFile:"%dest%.%ext%" /compress:%compression2%
echo.
)
)
EndLocal
pause
exit
:2
for /f "tokens=1 delims=-" %%i in ('echo %wimlist%') do set _start=%%i
for /f "tokens=2 delims=-" %%i in ('echo %wimlist%') do set _end=%%i
for /L %%i in (%_start%, 1, %_end%) do (
echo Экспорт индекса: %%i
echo Сжатие: %compression2% ^(%ext%^)
%dism% /English /Export-Image /SourceIndex:%%i /SourceImageFile:%1 /DestinationImageFile:"%dest%.%ext%" /compress:%compression2%
echo.
)
pause
exit