@echo off set WIMPATH= set WINPE=1 set SLIM=1 set DEFAULTLANGUAGE= set MOUNTDIR= rem ################################################################## rem # NORMALY THERE IS NO NEED TO CHANGE ANYTHING BELOW THIS COMMENT # rem ################################################################## %windir%\system32\reg.exe query "HKU\S-1-5-19" 1>nul 2>nul || goto :E_ADMIN cd /d "%~dp0" set WORKDIR=%cd% set TEMPDIR=%WORKDIR%\TEMP if "%MOUNTDIR%"=="" set MOUNTDIR=%WORKDIR%\MOUNT set DISMTEMPDIR=%TEMPDIR%\scratch set EXTRACTDIR=%TEMPDIR%\extract set INSTALLMOUNTDIR=%MOUNTDIR%\install set WINREMOUNTDIR=%MOUNTDIR%\winre set EAlang=(ja-jp,ko-kr,zh-cn,zh-hk,zh-tw) set _winpe=0 if exist ".\winpe\*supplement*.iso" ( set _winpe=1 for /f "delims=" %%i in ('dir /b ".\winpe\*supplement*.iso"') do set WinPERoot=.\winpe\%%i ) if %_winpe%==0 set WINPE=0 set _wim=0 if exist "*.wim" (for /f "delims=" %%i in ('dir /b *.wim') do (call set /a _wim+=1)) if "%WIMPATH%"=="" ( if %_wim%==0 goto :prompt for /f "delims=" %%i in ('dir /b *.wim') do set "WIMPATH=%%i" ) goto :check :prompt echo. echo ============================================================ echo Enter install.wim path ^(without quotes marks ""^) echo ============================================================ echo. set /p WIMPATH= if [%WIMPATH%]==[] set MESSAGE=ERROR: no source specified&goto :END goto :check :check for /d %%G in (7z.exe,7z.dll,cdimage.exe,imagex.exe) do ( if not exist "%~dp0bin\%%G" set ERRFILE=%%G&goto :E_BIN ) set "_7z=%~dp0bin\7z.exe" if not exist "%WIMPATH%" goto :E_DVD setlocal EnableDelayedExpansion echo. echo ============================================================ echo Prepare work directories echo ============================================================ echo. if exist "%TEMPDIR%" (rmdir /s /q "%TEMPDIR%" 1>nul 2>nul || goto :E_DELDIR) if exist "%MOUNTDIR%" (rmdir /s /q "%MOUNTDIR%" 1>nul 2>nul || goto :E_DELDIR) mkdir "%TEMPDIR%" || goto :E_MKDIR mkdir "%DISMTEMPDIR%" || goto :E_MKDIR mkdir "%EXTRACTDIR%" || goto :E_MKDIR mkdir "%MOUNTDIR%" || goto :E_MKDIR mkdir "%INSTALLMOUNTDIR%" || goto :E_MKDIR mkdir "%WINREMOUNTDIR%" || goto :E_MKDIR goto :start :setcount set /a count+=1 set LPFILE%count%=%1 goto :eof :setarch set /a count+=1 for /f "tokens=2 delims=: " %%i in ('dism.exe /english /get-wiminfo /wimfile:"%WIMPATH%" /index:%1 ^| find /i "Architecture"') do set WIMARCH%count%=%%i goto :eof :start echo. echo ============================================================ echo Detect language packs details echo ============================================================ echo. set _c=0 if exist ".\langs\*.exe" (for /f %%i in ('dir /b ".\langs\*.exe"') do (call set /a _c+=1)) if exist ".\langs\*.cab" (for /f %%i in ('dir /b ".\langs\*.cab"') do (call set /a _c+=1)) if %_c% equ 0 goto :E_FILES set LANGUAGES=%_c% if exist ".\langs\*.exe" (for /f %%i in ('dir /b /o:n ".\langs\*.exe"') do call :setcount %%i) if exist ".\langs\*.cab" (for /f %%i in ('dir /b /o:n ".\langs\*.cab"') do call :setcount %%i) for /L %%j in (1, 1, %LANGUAGES%) do ( "%_7z%" e ".\langs\!LPFILE%%j!" -o"%EXTRACTDIR%" langcfg.ini >nul for /f "tokens=2 delims==" %%i in ('type "%EXTRACTDIR%\langcfg.ini" ^| findstr /i "Language"') do set LANGUAGE%%j=%%i del /f /q "%EXTRACTDIR%\langcfg.ini" "%_7z%" e ".\langs\!LPFILE%%j!" -o"%EXTRACTDIR%" microsoft-windows-client-languagepack-package*7601*.mum 1>nul 2>nul if not exist "%EXTRACTDIR%\*.mum" set ERRFILE=!LPFILE%%j!&goto :E_SP1 for /f "tokens=3 delims=~" %%V in ('"dir "%EXTRACTDIR%\*.mum" /b" 2^>nul') do set LPARCH%%j=%%V del /f /q "%EXTRACTDIR%\*.mum" 1>nul 2>nul ) for /L %%j in (1, 1, %LANGUAGES%) do ( if /i !LPARCH%%j!==amd64 (echo !LANGUAGE%%j!: 64-bit {x64}) else (echo !LANGUAGE%%j!: 32-bit {x86}) set "WinpeOC%%j=%EXTRACTDIR%\WINPE\!LPARCH%%j!\WINPE_FPS" ) for /f "tokens=2 delims=: " %%i in ('dism.exe /english /get-wiminfo /wimfile:"%WIMPATH%" ^| findstr "Index"') do set VERSIONS=%%i if "%DEFAULTLANGUAGE%"=="" ( for /f "tokens=1" %%i in ('dism.exe /english /get-wiminfo /wimfile:"%WIMPATH%" /index:1 ^| find /i "Default"') do set DEFAULTLANGUAGE=%%i ) echo. echo ============================================================ echo Detect install.wim details echo ============================================================ echo. set /a count=0 for /L %%i in (1, 1, %VERSIONS%) do call :setarch %%i for /L %%i in (1, 1, %VERSIONS%) do ( if /i !WIMARCH%%i!==x64 (call set WIMARCH%%i=amd64) ) for /L %%i in (1, 1, %VERSIONS%) do ( echo !WIMARCH%%i!>>"%TEMPDIR%\WIMARCH.txt" ) set _label86=0 %windir%\system32\findstr.exe /i /v "amd64" "%TEMPDIR%\WIMARCH.txt" >nul if %errorlevel%==0 (set wimbit=32&set _label86=1) %windir%\system32\findstr.exe /i /v "x86" "%TEMPDIR%\WIMARCH.txt" >nul if %errorlevel%==0 ( if %_label86%==1 (set wimbit=dual) else (set wimbit=64) ) echo Count: %VERSIONS% Image^(s^) if %wimbit%==dual (echo Arch : Multi) else (echo Arch : %wimbit%-bit) if %WINPE% NEQ 1 goto :extract set _PEM86= set _PES86= set _PEX86= set _PEF86= set _PEM64= set _PES64= set _PEX64= set _PEF64= echo. echo ============================================================ echo Extract WinPE language packs echo ============================================================ echo. if %wimbit%==32 for /L %%j in (1, 1, %LANGUAGES%) do ( if /i !LPARCH%%j!==x86 ( echo !LANGUAGE%%j! / 32-bit "%_7z%" x "%WinPERoot%" -o"%EXTRACTDIR%\WINPE" *!LPARCH%%j!\WINPE_FPS\!LANGUAGE%%j! -r >nul for /d %%G in %EAlang% do ( if /i !LANGUAGE%%j!==%%G "%_7z%" x "%WinPERoot%" -o"%EXTRACTDIR%\WINPE" !LPARCH%%j!\WINPE_FPS\WinPE-FontSupport-%%G.cab >nul if /i !LANGUAGE%%j!==%%G call set _PEF86=!_PEF86! /PackagePath:"!WinpeOC%%j!\WinPE-FontSupport-%%G.cab" ) call set _PEM86=!_PEM86! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\lp_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-SRT_!LANGUAGE%%j!.cab" call set _PES86=!_PES86! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Setup_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Setup-Client_!LANGUAGE%%j!.cab" call set _PEX86=!_PEX86! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Scripting_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-WDS-Tools_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-WMI_!LANGUAGE%%j!.cab" ) ) if %wimbit%==64 for /L %%j in (1, 1, %LANGUAGES%) do ( if /i !LPARCH%%j!==amd64 ( echo !LANGUAGE%%j! / 64-bit "%_7z%" x "%WinPERoot%" -o"%EXTRACTDIR%\WINPE" *!LPARCH%%j!\WINPE_FPS\!LANGUAGE%%j! -r >nul for /d %%G in %EAlang% do ( if /i !LANGUAGE%%j!==%%G "%_7z%" x "%WinPERoot%" -o"%EXTRACTDIR%\WINPE" !LPARCH%%j!\WINPE_FPS\WinPE-FontSupport-%%G.cab >nul if /i !LANGUAGE%%j!==%%G call set _PEF64=!_PEF64! /PackagePath:"!WinpeOC%%j!\WinPE-FontSupport-%%G.cab" ) call set _PEM64=!_PEM64! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\lp_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-SRT_!LANGUAGE%%j!.cab" call set _PES64=!_PES64! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Setup_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Setup-Client_!LANGUAGE%%j!.cab" call set _PEX64=!_PEx64! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Scripting_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-WDS-Tools_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-WMI_!LANGUAGE%%j!.cab" ) ) if %wimbit%==dual for /L %%j in (1, 1, %LANGUAGES%) do ( if /i !LPARCH%%j!==x86 ( echo !LANGUAGE%%j! / 32-bit "%_7z%" x "%WinPERoot%" -o"%EXTRACTDIR%\WINPE" *!LPARCH%%j!\WINPE_FPS\!LANGUAGE%%j! -r >nul for /d %%G in %EAlang% do ( if /i !LANGUAGE%%j!==%%G "%_7z%" x "%WinPERoot%" -o"%EXTRACTDIR%\WINPE" !LPARCH%%j!\WINPE_FPS\WinPE-FontSupport-%%G.cab >nul if /i !LANGUAGE%%j!==%%G call set _PEF86=!_PEF86! /PackagePath:"!WinpeOC%%j!\WinPE-FontSupport-%%G.cab" ) call set _PEM86=!_PEM86! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\lp_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-SRT_!LANGUAGE%%j!.cab" call set _PES86=!_PES86! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Setup_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Setup-Client_!LANGUAGE%%j!.cab" call set _PEX86=!_PEX86! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Scripting_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-WDS-Tools_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-WMI_!LANGUAGE%%j!.cab" ) else ( echo !LANGUAGE%%j! / 64-bit "%_7z%" x "%WinPERoot%" -o"%EXTRACTDIR%\WINPE" *!LPARCH%%j!\WINPE_FPS\!LANGUAGE%%j! -r >nul for /d %%G in %EAlang% do ( if /i !LANGUAGE%%j!==%%G "%_7z%" x "%WinPERoot%" -o"%EXTRACTDIR%\WINPE" !LPARCH%%j!\WINPE_FPS\WinPE-FontSupport-%%G.cab >nul if /i !LANGUAGE%%j!==%%G call set _PEF64=!_PEF64! /PackagePath:"!WinpeOC%%j!\WinPE-FontSupport-%%G.cab" ) call set _PEM64=!_PEM64! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\lp_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-SRT_!LANGUAGE%%j!.cab" call set _PES64=!_PES64! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Setup_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Setup-Client_!LANGUAGE%%j!.cab" call set _PEX64=!_PEx64! /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-Scripting_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-WDS-Tools_!LANGUAGE%%j!.cab" /PackagePath:"!WinpeOC%%j!\!LANGUAGE%%j!\WinPE-WMI_!LANGUAGE%%j!.cab" ) ) :extract set _PP86= set _PP64= echo. echo ============================================================ echo Extract language packs echo ============================================================ echo. if %wimbit%==32 for /L %%j in (1, 1, %LANGUAGES%) do ( if /i !LPARCH%%j!==x86 ( echo !LANGUAGE%%j! / 32-bit copy ".\langs\!LPFILE%%j!" "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" /y >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%EXTRACTDIR%\!LPARCH%%j!\!LANGUAGE%%j!" *sp1\setup\sources\!LANGUAGE%%j! -r >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%EXTRACTDIR%\!LPARCH%%j!\!LANGUAGE%%j!" *sp1\sources\license\!LANGUAGE%%j! -r >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%TEMPDIR%\!LPARCH%%j!\!LANGUAGE%%j!" * -r >nul call set _PP86=!_PP86! /packagepath:"%TEMPDIR%\!LPARCH%%j!\!LANGUAGE%%j!\update.mum" ) ) if %wimbit%==64 for /L %%j in (1, 1, %LANGUAGES%) do ( if /i !LPARCH%%j!==amd64 ( echo !LANGUAGE%%j! / 64-bit copy ".\langs\!LPFILE%%j!" "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" /y >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%EXTRACTDIR%\!LPARCH%%j!\!LANGUAGE%%j!" *sp1\setup\sources\!LANGUAGE%%j! -r >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%EXTRACTDIR%\!LPARCH%%j!\!LANGUAGE%%j!" *sp1\sources\license\!LANGUAGE%%j! -r >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%TEMPDIR%\!LPARCH%%j!\!LANGUAGE%%j!" * -r >nul call set _PP64=!_PP64! /packagepath:"%TEMPDIR%\!LPARCH%%j!\!LANGUAGE%%j!\update.mum" ) ) if %wimbit%==dual for /L %%j in (1, 1, %LANGUAGES%) do ( if /i !LPARCH%%j!==x86 ( echo !LANGUAGE%%j! / 32-bit copy ".\langs\!LPFILE%%j!" "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" /y >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%EXTRACTDIR%\!LPARCH%%j!\!LANGUAGE%%j!" *sp1\setup\sources\!LANGUAGE%%j! -r >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%EXTRACTDIR%\!LPARCH%%j!\!LANGUAGE%%j!" *sp1\sources\license\!LANGUAGE%%j! -r >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%TEMPDIR%\!LPARCH%%j!\!LANGUAGE%%j!" * -r >nul call set _PP86=!_PP86! /packagepath:"%TEMPDIR%\!LPARCH%%j!\!LANGUAGE%%j!\update.mum" ) else ( echo !LANGUAGE%%j! / 64-bit copy ".\langs\!LPFILE%%j!" "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" /y >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%EXTRACTDIR%\!LPARCH%%j!\!LANGUAGE%%j!" *sp1\setup\sources\!LANGUAGE%%j! -r >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%EXTRACTDIR%\!LPARCH%%j!\!LANGUAGE%%j!" *sp1\sources\license\!LANGUAGE%%j! -r >nul "%_7z%" x "%TEMPDIR%\!LANGUAGE%%j!-!LPARCH%%j!.cab" -o"%TEMPDIR%\!LPARCH%%j!\!LANGUAGE%%j!" * -r >nul call set _PP64=!_PP64! /packagepath:"%TEMPDIR%\!LPARCH%%j!\!LANGUAGE%%j!\update.mum" ) ) if %wimbit%==32 if "!_PP86!"=="" goto :E_ARCH if %wimbit%==64 if "!_PP64!"=="" goto :E_ARCH :proceed for /L %%i in (1, 1, %VERSIONS%) do ( echo. echo ============================================================ echo Mount install.wim - index %%i/%VERSIONS% echo ============================================================ dism.exe /ScratchDir:"%DISMTEMPDIR%" /Mount-Wim /Wimfile:"%WIMPATH%" /Index:%%i /MountDir:"%INSTALLMOUNTDIR%" if errorlevel 1 goto :E_MOUNT attrib -S -H -I "%INSTALLMOUNTDIR%\Windows\System32\Recovery\winre.wim" 1>nul 2>nul if %WINPE%==1 if not exist "%TEMPDIR%\WR\!WIMARCH%%i!\winre.wim" ( echo. echo ============================================================ echo Update winre.wim / !WIMARCH%%i! echo ============================================================ echo. mkdir "%TEMPDIR%\WR\!WIMARCH%%i!" copy "%INSTALLMOUNTDIR%\Windows\System32\Recovery\winre.wim" "%TEMPDIR%\WR\!WIMARCH%%i!" echo. echo ============================================================ echo Mount winre.wim echo ============================================================ dism.exe /ScratchDir:"!DISMTEMPDIR!" /Mount-Wim /Wimfile:"!TEMPDIR!\WR\!WIMARCH%%i!\winre.wim" /Index:1 /MountDir:"!WINREMOUNTDIR!" if errorlevel 1 goto :E_MOUNT if exist .\bin\Windows6.1-KB2883457-!WIMARCH%%i!.cab if not exist "!WINREMOUNTDIR!\Windows\servicing\packages\package_for_kb2883457*.mum" ( echo. echo ============================================================ echo Update Recovery Tools echo ============================================================ dism.exe /ScratchDir:"!DISMTEMPDIR!" /Image:"!WINREMOUNTDIR!" /Add-Package /PackagePath:".\bin\Windows6.1-KB2883457-!WIMARCH%%i!.cab" ) echo. echo ============================================================ echo Add LPs to winre.wim echo ============================================================ if "!_PEM64!" NEQ "" if /i !WIMARCH%%i!==amd64 ( dism.exe /ScratchDir:"!DISMTEMPDIR!" /Image:"!WINREMOUNTDIR!" /Add-Package !_PEM64! !_PES64! !_PEF64! if !SLIM! NEQ 1 dism.exe /ScratchDir:"!DISMTEMPDIR!" /Image:"!WINREMOUNTDIR!" /Add-Package !_PEX64! ) if "!_PEM86!" NEQ "" if /i !WIMARCH%%i!==x86 ( dism.exe /ScratchDir:"!DISMTEMPDIR!" /Image:"!WINREMOUNTDIR!" /Add-Package !_PEM86! !_PES86! !_PEF86! if !SLIM! NEQ 1 dism.exe /ScratchDir:"!DISMTEMPDIR!" /Image:"!WINREMOUNTDIR!" /Add-Package !_PEX86! ) echo. echo ============================================================ echo Update language settings echo ============================================================ echo. dism.exe /Quiet /ScratchDir:"!DISMTEMPDIR!" /Image:"!WINREMOUNTDIR!" /Set-AllIntl:!DEFAULTLANGUAGE! dism.exe /Quiet /ScratchDir:"!DISMTEMPDIR!" /Image:"!WINREMOUNTDIR!" /Set-SKUIntlDefaults:!DEFAULTLANGUAGE! dism.exe /Quiet /ScratchDir:"!DISMTEMPDIR!" /Image:"!WINREMOUNTDIR!" /Gen-LangINI /Distribution:"!WINREMOUNTDIR!" dism.exe /Quiet /ScratchDir:"!DISMTEMPDIR!" /Image:"!WINREMOUNTDIR!" /Set-SetupUILang:!DEFAULTLANGUAGE! /Distribution:"!WINREMOUNTDIR!" call :cleanup "!WINREMOUNTDIR!" echo. echo ============================================================ echo Unmount winre.wim echo ============================================================ dism.exe /ScratchDir:"!DISMTEMPDIR!" /Unmount-Wim /MountDir:"!WINREMOUNTDIR!" /Commit if errorlevel 1 goto :E_UNMOUNT echo. echo ============================================================ echo Rebuild winre.wim echo ============================================================ echo. "%~dp0bin\imagex.exe" /BOOT /EXPORT "!TEMPDIR!\WR\!WIMARCH%%i!\winre.wim" 1 "!EXTRACTDIR!\winre.wim" >nul if exist "!EXTRACTDIR!\winre.wim" move /y "!EXTRACTDIR!\winre.wim" "!TEMPDIR!\WR\!WIMARCH%%i!" >nul ) echo. echo ============================================================ echo Add LPs to install.wim - index %%i/%VERSIONS% echo ============================================================ if "!_PP64!" NEQ "" if /i !WIMARCH%%i!==amd64 ( dism.exe /ScratchDir:"%DISMTEMPDIR%" /Image:"%INSTALLMOUNTDIR%" /Add-Package !_PP64! ) if "!_PP86!" NEQ "" if /i !WIMARCH%%i!==x86 ( dism.exe /ScratchDir:"%DISMTEMPDIR%" /Image:"%INSTALLMOUNTDIR%" /Add-Package !_PP86! ) echo. echo ============================================================ echo Update language settings echo ============================================================ echo. dism.exe /Quiet /ScratchDir:"%DISMTEMPDIR%" /Image:"%INSTALLMOUNTDIR%" /Set-AllIntl:%DEFAULTLANGUAGE% dism.exe /Quiet /ScratchDir:"%DISMTEMPDIR%" /Image:"%INSTALLMOUNTDIR%" /Set-SKUIntlDefaults:%DEFAULTLANGUAGE% if %WINPE%==1 if exist "%TEMPDIR%\WR\!WIMARCH%%i!\winre.wim" ( echo. echo ============================================================ echo Add updated winre.wim to install.wim - index %%i/%VERSIONS% echo ============================================================ echo. copy "%TEMPDIR%\WR\!WIMARCH%%i!\winre.wim" "%INSTALLMOUNTDIR%\Windows\System32\Recovery" /y ) call :cleanup "%INSTALLMOUNTDIR%" echo. echo ============================================================ echo Unmount install.wim - index %%i/%VERSIONS% echo ============================================================ dism.exe /ScratchDir:"%DISMTEMPDIR%" /Unmount-Wim /MountDir:"%INSTALLMOUNTDIR%" /Commit if errorlevel 1 goto :E_UNMOUNT ) echo. echo ============================================================ echo Rebuild install.wim echo ============================================================ "%~dp0bin\imagex.exe" /EXPORT "%WIMPATH%" * "%TEMPDIR%\install.wim" if exist "%TEMPDIR%\install.wim" move /y "%TEMPDIR%\install.wim" "%WIMPATH%" >nul echo. echo ============================================================ echo Remove temporary directories echo ============================================================ echo. call :remove set MESSAGE=Done goto :END :E_BIN call :remove set MESSAGE=ERROR: Required %ERRFILE% is missing in "bin" folder goto :END :E_DVD call :remove set MESSAGE=ERROR: Could not find the specified install.wim goto :END :E_ESD call :remove set MESSAGE=ERROR: Detected install.wim file is actually .esd file goto :END :E_FILES call :remove set MESSAGE=ERROR: Could not detect any file in "langs" folder goto :END :E_ARCH call :remove set MESSAGE=ERROR: None of detected LangPacks match any of WIM images architecture goto :END :E_SP1 call :remove set MESSAGE=ERROR: %ERRFILE% is not a valid Windows 7 SP1 LangPack goto :END :E_DELDIR set MESSAGE=ERROR: Could not delete temporary directory goto :END :E_MKDIR set MESSAGE=ERROR: Could not create temporary directory goto :END :E_MOUNT set MESSAGE=ERROR: Could not mount WIM image goto :END :E_UNMOUNT set MESSAGE=ERROR: Could not unmount WIM image goto :END :E_ADMIN set MESSAGE=ERROR: Run the script as administrator goto :END :remove if exist "%TEMPDIR%" (rmdir /s /q "%TEMPDIR%" 1>nul 2>nul || goto :E_DELDIR) if exist "%MOUNTDIR%" (rmdir /s /q "%MOUNTDIR%" 1>nul 2>nul || goto :E_DELDIR) goto :eof :cleanup if exist "%~1\Windows\WinSxS\ManifestCache\*.bin" ( takeown /f "%~1\Windows\WinSxS\ManifestCache\*.bin" /A >nul 2>&1 icacls "%~1\Windows\WinSxS\ManifestCache\*.bin" /grant *S-1-5-32-544:F >nul 2>&1 del /f /q "%~1\Windows\WinSxS\ManifestCache\*.bin" >nul 2>&1 ) if exist "%~1\Windows\WinSxS\Temp\PendingDeletes\*" ( takeown /f "%~1\Windows\WinSxS\Temp\PendingDeletes\*" /A >nul 2>&1 icacls "%~1\Windows\WinSxS\Temp\PendingDeletes\*" /grant *S-1-5-32-544:F >nul 2>&1 del /f /q "%~1\Windows\WinSxS\Temp\PendingDeletes\*" >nul 2>&1 ) if exist "%~1\Windows\inf\*.log" ( del /f /q "%~1\Windows\inf\*.log" >nul 2>&1 ) goto :eof :END echo. echo ============================================================ echo %MESSAGE% echo ============================================================ echo. echo Press any Key to Exit. pause >nul exit