@echo off
rem --------- Optional: An die eigenen Verhaeltnisse anpassen -----------

rem Pfad zum Arbeitsverzeichnis setzen, beispielsweise d:\wb\
rem Ohne Anpassung verwendet das Skript den Ordner, in dem es liegt
rem Keine Leerzeichen im Pfad!
set workdir=%~d0%~p0

rem Mount-Ordner setzen, beispielsweise d:\wb\mount
rem Ohne Anpassung erstellt das Skript ihn in dem Ordner, in dem es liegt
rem Ordner darf nicht vorhanden sein!
rem Keine Leerzeichen im Pfad!
set mountdir=%workdir%mount

rem Name der WIM-Datei setzen, normalerweise install.wim
set imagefile=install.wim

rem Image aus der WIM-Datei auswaehlen. 
rem normalerweise Pro/Enterprise/selbstgebautesWIM=1, Core=2
set index=1

rem Namen der Patch-Dateien setzen
set patch1=Windows8.1-KB2919442-x64.msu
set patch2=Windows8.1-KB2919355-x64.msu

rem ------------- Ende der Anpassungen -----------

rem Vorabpruefungen
if exist %mountdir% goto Fehler1
if not exist %workdir%%imagefile% set fehlt=%imagefile%&&goto Fehler2
if NOT exist %workdir%%patch1% set fehlt=%patch1%&& goto Fehler2
if NOT exist %workdir%%patch2% set fehlt=%patch2%&& goto Fehler2

rem Vorsichtshalber aufraeumen
dism /cleanup-mountpoints
dism /cleanup-wim

set operation=*** Image bereitstellen ***
echo.
echo %operation%
echo.
md %mountdir%
if errorlevel 1 goto fehler4
dism /mount-image /imagefile:%workdir%%imagefile% /index:%index% /mountdir:%mountdir%
if errorlevel 1 goto fehler4

set operation=*** Updates hinzufuegen ***
echo.
echo %operation%
echo.
dism /add-package /packagepath:%workdir%%patch1% /image:%mountdir%
if errorlevel 1 goto fehler4
dism /add-package /packagepath:%workdir%%patch2% /image:%mountdir%
if errorlevel 1 goto fehler4

set operation=*** RE bereitstellen ***
echo.
echo %operation%
echo.
md %mountdir%\mountre
if errorlevel 1 goto fehler4
dism /mount-image /imagefile:%mountdir%\windows\system32\recovery\winre.wim /index:1 /mountdir:%mountdir%\mountre
if errorlevel 1 goto fehler4

set operation=*** Updates zu RE hinzufuegen ***
echo.
echo %operation%
echo.
dism /add-package /packagepath:%workdir%%patch1% /image:%mountdir%\mountre
if errorlevel 1 goto fehler4
dism /add-package /packagepath:%workdir%%patch2% /image:%mountdir%\mountre
if errorlevel 1 goto fehler4

set operation=*** RE aufraeumen ***
echo.
echo %operation%
echo.
dism /cleanup-image /image:%mountdir%\mountre /startcomponentcleanup /resetbase
if errorlevel 1 goto fehler4

set operation=*** Bereitstellung aufheben ***
echo.
echo %operation%
echo.
Dism /unmount-image /mountdir:%mountdir%\mountre /commit
if errorlevel 1 goto fehler4
rmdir %mountdir%\mountre /q
if errorlevel 1 goto fehler4

set operation=*** RE in neue WIM-Datei exportieren ***
echo.
echo %operation%
echo.
Dism /export-image /sourceimagefile:%mountdir%\windows\system32\recovery\winre.wim /sourceindex:1 /destinationimagefile:%workdir%winre.wim
if errorlevel 1 goto fehler4

set operation=*** Alte RE-Datei durch neue ersetzen ***
echo.
echo %operation%
echo.
del %mountdir%\windows\system32\recovery\winre.wim
if errorlevel 1 goto fehler4
copy %workdir%winre.wim %mountdir%\windows\system32\recovery\winre.wim
if errorlevel 1 goto fehler4
del %workdir%winre.wim
if errorlevel 1 goto fehler4

set operation=*** Image-Bereitstellung aufheben ***
echo.
echo %operation%
echo.
dism /unmount-image /mountdir:%mountdir% /commit
if errorlevel 1 goto fehler4
rmdir %mountdir% /q
if errorlevel 1 goto fehler4

rem Ende
echo.
echo Fertig.
pause
goto :eof

rem Falls Mount-Ordner bereits vorhanden
:fehler1
echo Fehler: Mount-Ordner existiert bereits
pause
goto :eof

rem Falls Dateien fehlen
:fehler2
echo Fehler: Im Arbeitsverzeichnis fehlt die Datei %fehlt%
pause
goto :eof

rem Fehler durch externes Programm
:fehler4
echo Operation fehlgeschlagen: %operation%
pause
goto :eof