Collection of batch scripts utilities for Windows
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

443 lines
20 KiB

@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