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.
326 lines
13 KiB
326 lines
13 KiB
@echo off |
|
%windir%\system32\reg.exe query "HKU\S-1-5-19" 1>nul 2>nul || goto :eof |
|
cd /d "%~dp0" |
|
|
|
:: Create final new iso? set 1 or 0 |
|
set ISO=1 |
|
|
|
:: Optional, set mount directory on another partition if available to speed integration, or leave it blank |
|
set MOUNTDIR= |
|
|
|
rem ################################################################## |
|
rem # NORMALY THERE IS NO NEED TO CHANGE ANYTHING BELOW THIS COMMENT # |
|
rem ################################################################## |
|
|
|
set _img=0 |
|
if exist "*.img" (for /f "delims=:" %%i in ('dir /b "*.img"') do (call set /a _img+=1)) |
|
if %_img% equ 0 set MESSAGE=ERROR: no source .IMG file found&goto :END |
|
if %_img% gtr 1 set MESSAGE=ERROR: Detected more than one source IMG file&goto :END |
|
for /f "delims=:" %%i in ('dir /b "*.img"') do set _source=%%i |
|
|
|
set _iso=0 |
|
if exist "*.iso" (for /f "delims=:" %%i in ('dir /b "*.iso"') do (call set /a _iso+=1)) |
|
if %_iso% equ 0 set MESSAGE=ERROR: no target .ISO file found&goto :END |
|
if %_iso% gtr 1 set MESSAGE=ERROR: Detected more than one target ISO file&goto :END |
|
for /f "delims=:" %%i in ('dir /b "*.iso"') do set DVDPATH=%%i |
|
|
|
set _cab=0 |
|
if exist "*.cab" (for /f "delims=:" %%i in ('dir /b "*.cab"') do (call set /a _cab+=1)) |
|
if %_cab% equ 0 set MESSAGE=ERROR: no Lang Pack .CAB file found&goto :END |
|
if %_cab% gtr 1 set MESSAGE=ERROR: Detected more than one Lang Pack file&goto :END |
|
for /f "delims=:" %%i in ('dir /b "*.cab"') do set LPFILE=%%i |
|
|
|
set WORKDIR=%~dp0 |
|
set WORKDIR=%WORKDIR:~0,-1% |
|
set DVDDIR=%WORKDIR%\DVD |
|
set TEMPDIR=%WORKDIR%\TEMP |
|
if "%MOUNTDIR%"=="" set MOUNTDIR=%WORKDIR%\MOUNT |
|
set DISMTEMPDIR=%TEMPDIR%\scratch |
|
set EXTRACTDIR=%TEMPDIR%\extract |
|
set INSTALLMOUNTDIR=%MOUNTDIR%\install |
|
set SECMOUNTDIR=%MOUNTDIR%\offline |
|
|
|
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G |
|
if %winbuild% GEQ 9600 ( |
|
SET DISMRoot=%windir%\system32\dism.exe |
|
goto :prepare |
|
) |
|
|
|
SET regKeyPathFound=1 |
|
SET wowRegKeyPathFound=1 |
|
REG QUERY "HKLM\Software\Wow6432Node\Microsoft\Windows Kits\Installed Roots" /v KitsRoot81 1>NUL 2>NUL || SET wowRegKeyPathFound=0 |
|
REG QUERY "HKLM\Software\Microsoft\Windows Kits\Installed Roots" /v KitsRoot81 1>NUL 2>NUL || SET regKeyPathFound=0 |
|
if %wowRegKeyPathFound% EQU 0 ( |
|
if %regKeyPathFound% EQU 0 ( |
|
goto :skip |
|
) else ( |
|
SET regKeyPath=HKLM\Software\Microsoft\Windows Kits\Installed Roots |
|
) |
|
) else ( |
|
SET regKeyPath=HKLM\Software\Wow6432Node\Microsoft\Windows Kits\Installed Roots |
|
) |
|
FOR /F "skip=2 tokens=2*" %%i IN ('REG QUERY "%regKeyPath%" /v KitsRoot81') DO (SET KitsRoot=%%j) |
|
SET DandIRoot=%KitsRoot%Assessment and Deployment Kit\Deployment Tools |
|
SET DISMRoot=%DandIRoot%\%PROCESSOR_ARCHITECTURE%\DISM\dism.exe |
|
if not exist "%DISMRoot%" goto :skip |
|
goto :prepare |
|
|
|
:skip |
|
SET DISMRoot=%~dp0dism\dism.exe |
|
|
|
:prepare |
|
if not exist "%~dp0dism\7z.exe" goto :E_BIN |
|
setlocal EnableDelayedExpansion |
|
echo. |
|
echo ============================================================ |
|
echo Remove temporary directories if exist |
|
echo ============================================================ |
|
echo. |
|
if exist "%DVDDIR%" rmdir /s /q "%DVDDIR%" >nul |
|
if errorlevel 1 goto :E_DELDIR |
|
if exist "%TEMPDIR%" rmdir /s /q "%TEMPDIR%" >nul |
|
if errorlevel 1 goto :E_DELDIR |
|
if exist "%MOUNTDIR%" rmdir /s /q "%MOUNTDIR%" >nul |
|
if errorlevel 1 goto :E_DELDIR |
|
echo. |
|
echo ============================================================ |
|
echo Create work directories |
|
echo ============================================================ |
|
echo. |
|
mkdir "%DVDDIR%" |
|
if errorlevel 1 goto :E_MKDIR |
|
mkdir "%TEMPDIR%" |
|
if errorlevel 1 goto :E_MKDIR |
|
mkdir "%DISMTEMPDIR%" |
|
if errorlevel 1 goto :E_MKDIR |
|
mkdir "%EXTRACTDIR%" |
|
if errorlevel 1 goto :E_MKDIR |
|
mkdir "%MOUNTDIR%" |
|
if errorlevel 1 goto :E_MKDIR |
|
mkdir "%INSTALLMOUNTDIR%" |
|
if errorlevel 1 goto :E_MKDIR |
|
mkdir "%SECMOUNTDIR%" |
|
if errorlevel 1 goto :E_MKDIR |
|
|
|
"%~dp0dism\7z.exe" e "%LPFILE%" -o"%EXTRACTDIR%" langcfg.ini >nul |
|
FOR /F "tokens=2 delims==" %%i IN ('type "%EXTRACTDIR%\langcfg.ini" ^| findstr /i "Language"') DO set LANGUAGE=%%i |
|
set lang=%LANGUAGE:~0,2% |
|
|
|
"%~dp0dism\7z.exe" e "%DVDPATH%" -o"%EXTRACTDIR%" sources\lang.ini >nul |
|
for /f "skip=5 tokens=1 delims==" %%i in ('type "%EXTRACTDIR%\lang.ini"') do set langiso=%%i |
|
if /i %LANGUAGE% neq %langiso% goto :E_LANG |
|
|
|
"%~dp0dism\7z.exe" e "%LPFILE%" -o"%EXTRACTDIR%" Microsoft-Windows-CommonFoundation*amd64*.mum 1>nul 2>nul |
|
if exist "%EXTRACTDIR%\*.mum" ( |
|
set arch=amd64 |
|
set archm=x64 |
|
set archiso=X64 |
|
) else ( |
|
set arch=x86 |
|
set archm=x86 |
|
set archiso=X86 |
|
) |
|
echo. |
|
echo ============================================================ |
|
echo Detected LP: %LANGUAGE% %archm% |
|
echo ============================================================ |
|
echo. |
|
"%~dp0dism\7z.exe" e "%_source%" -o"%EXTRACTDIR%" efi\boot\bootx64.efi 1>nul 2>nul |
|
if exist "%EXTRACTDIR%\bootx64.efi" (set archwim=x64) else (set archwim=x86) |
|
if /i %archwim% neq %archm% goto :E_ARCH |
|
echo. |
|
echo ============================================================ |
|
echo Extract target ISO contents |
|
echo ============================================================ |
|
echo. |
|
echo "%DVDPATH%" |
|
echo. |
|
"%~dp0dism\7z.exe" x "%DVDPATH%" -o"%DVDDIR%" * -r >nul |
|
if exist "%DVDDIR%\sources\ei.cfg" DEL /F /Q "%DVDDIR%\sources\ei.cfg" >nul |
|
echo. |
|
echo ============================================================ |
|
echo Extract winre.wim of target ISO |
|
echo ============================================================ |
|
echo. |
|
"%~dp0dism\7z.exe" e "%DVDDIR%\sources\install.wim" -o"%TEMPDIR%" *Windows\System32\Recovery\winre.wim -r -aos >nul |
|
attrib -S -H -I "%TEMPDIR%\winre.wim" |
|
echo. |
|
echo ============================================================ |
|
echo Extract install.wim of source IMG |
|
echo ============================================================ |
|
echo. |
|
echo "%_source%" |
|
echo. |
|
"%~dp0dism\7z.exe" e "%_source%" -o"%TEMPDIR%" sources\install.wim >nul |
|
for /f "tokens=2 delims=: " %%i in ('dism\dism.exe /english /get-wiminfo /wimfile:"%TEMPDIR%\install.wim" /index:1 ^| find /i "Edition"') do set editionid=%%i |
|
echo. |
|
echo ============================================================ |
|
echo Mount install.wim of source IMG |
|
echo ============================================================ |
|
echo. |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Mount-Wim /Wimfile:"%TEMPDIR%\install.wim" /Index:1 /MountDir:"%INSTALLMOUNTDIR%" |
|
if errorlevel 1 goto :E_MOUNT |
|
for /f %%i in ('dir /b "%INSTALLMOUNTDIR%\Windows\servicing\Packages\Microsoft-Windows-Client-LanguagePack-Package~31bf3856ad364e35*.mum"') do set OLP=%%i |
|
set OLP=%OLP:~0,-4% |
|
echo. |
|
echo ============================================================ |
|
echo Add new language pack |
|
echo ============================================================ |
|
echo. |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Image:"%INSTALLMOUNTDIR%" /Add-Package /PackagePath:"%LPFILE%" |
|
echo. |
|
echo ============================================================ |
|
echo Update default language settings |
|
echo ============================================================ |
|
echo. |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Image:"%INSTALLMOUNTDIR%" /Set-AllIntl:%LANGUAGE% |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Image:"%INSTALLMOUNTDIR%" /Set-SKUIntlDefaults:%LANGUAGE% |
|
echo. |
|
echo ============================================================ |
|
echo Remove old language pack |
|
echo ============================================================ |
|
echo. |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Image:"%INSTALLMOUNTDIR%" /Remove-Package /PackageName:%OLP% |
|
echo. |
|
if not exist "%INSTALLMOUNTDIR%\Windows\WinSxS\pending.xml" ( |
|
echo. |
|
echo ============================================================ |
|
echo Cleanup the image |
|
echo ============================================================ |
|
echo. |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Image:"%INSTALLMOUNTDIR%" /Cleanup-Image /StartComponentCleanup /ResetBase |
|
) |
|
takeown /f "%INSTALLMOUNTDIR%\Windows\WinSxS\ManifestCache\*.bin" >nul |
|
icacls "%INSTALLMOUNTDIR%\Windows\WinSxS\ManifestCache\*.bin" /grant *S-1-5-32-544:F >nul |
|
del /f /q "%INSTALLMOUNTDIR%\Windows\WinSxS\ManifestCache\*.bin" >nul |
|
takeown /f "%INSTALLMOUNTDIR%\Windows\WinSxS\Temp\PendingDeletes\*" >nul |
|
icacls "%INSTALLMOUNTDIR%\Windows\WinSxS\Temp\PendingDeletes\*" /grant *S-1-5-32-544:F >nul |
|
del /f /q "%INSTALLMOUNTDIR%\Windows\WinSxS\Temp\PendingDeletes\*" >nul |
|
if exist "%INSTALLMOUNTDIR%\Windows\inf\*.log" del /f /q "%INSTALLMOUNTDIR%\Windows\inf\*.log" >nul |
|
echo. |
|
echo ============================================================ |
|
echo Add extracted winre.wim |
|
echo ============================================================ |
|
echo. |
|
attrib -S -H -I "%INSTALLMOUNTDIR%\Windows\System32\Recovery\winre.wim" |
|
copy /y "%TEMPDIR%\winre.wim" "%INSTALLMOUNTDIR%\Windows\System32\Recovery" |
|
echo. |
|
echo ============================================================ |
|
echo Mount install.wim of target ISO |
|
echo ============================================================ |
|
echo. |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Mount-Wim /Wimfile:"%DVDDIR%\sources\install.wim" /Index:1 /MountDir:"%SECMOUNTDIR%" |
|
if errorlevel 1 goto :E_MOUNT |
|
echo. |
|
echo ============================================================ |
|
echo Copy Store Apps language resources |
|
echo ============================================================ |
|
echo. |
|
dism\NSudoC.exe -U:T -P:E "%~dp0dism\hstart.exe /NOCONSOLE /WAIT /HIGH "%windir%\system32\robocopy.exe "%SECMOUNTDIR%\Program Files\WindowsApps" "%INSTALLMOUNTDIR%\Program Files\WindowsApps" /MIR /COPYALL" |
|
:timer |
|
timeout /t 10 >nul |
|
tasklist /FI "IMAGENAME eq hstart.exe" | find /i "hstart.exe" >nul |
|
if %errorlevel%==0 goto :timer |
|
echo. |
|
echo ============================================================ |
|
echo Discard install.wim of target ISO |
|
echo ============================================================ |
|
echo. |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Unmount-Wim /MountDir:"%SECMOUNTDIR%" /Discard |
|
if errorlevel 1 goto :E_UNMOUNT |
|
DEL /F /Q "%DVDDIR%\sources\install.wim" >nul |
|
echo. |
|
echo ============================================================ |
|
echo Save install.wim of source IMG |
|
echo ============================================================ |
|
echo. |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Unmount-Wim /MountDir:"%INSTALLMOUNTDIR%" /Commit |
|
if errorlevel 1 goto :E_UNMOUNT |
|
echo. |
|
echo ============================================================ |
|
echo Rebuild new install.wim |
|
echo ============================================================ |
|
echo. |
|
"%DISMRoot%" /ScratchDir:"%DISMTEMPDIR%" /Export-Image /SourceImageFile:"%TEMPDIR%\install.wim" /SourceIndex:1 /DestinationImageFile:"%DVDDIR%\sources\install.wim" /CheckIntegrity |
|
if errorlevel 1 goto :E_UNMOUNT |
|
DEL /F /Q "%TEMPDIR%\install.wim" >nul |
|
if %ISO% EQU 0 goto :E_OSCDIMG |
|
echo. |
|
echo ============================================================ |
|
echo Create ISO file |
|
echo ============================================================ |
|
echo. |
|
for %%b in (A,B,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 set LANGUAGE=!LANGUAGE:%%b=%%b! |
|
if %editionid%==CoreConnected set DVDLABEL=IR3_CCONA_%archiso%FREO_%LANGUAGE%_DV9 |
|
if %editionid%==CoreConnectedSingleLanguage set DVDLABEL=IR3_CCSLA_%archiso%FREO_%LANGUAGE%_DV9 |
|
set DVDISO=%DVDLABEL%.iso |
|
"%~dp0dism\oscdimg.exe" -bootdata:2#p0,e,b"%DVDDIR%\boot\etfsboot.com"#pEF,e,b"%DVDDIR%\efi\Microsoft\boot\efisys.bin" -o -h -u2 -udfver102 -m -t03/18/2014,08:25:28 -g -l"%DVDLABEL%" "%DVDDIR%" "%DVDISO%" |
|
if errorlevel 1 goto :E_CREATEISO |
|
echo. |
|
echo ============================================================ |
|
echo Remove the temporary directories |
|
echo ============================================================ |
|
echo. |
|
rmdir /s /q "%DVDDIR%" 1>nul 2>nul |
|
rmdir /s /q "%MOUNTDIR%" 1>nul 2>nul |
|
rmdir /s /q "%TEMPDIR%" 1>nul 2>nul |
|
if exist "%DVDDIR%" rmdir /s /q "%DVDDIR%" 1>nul 2>nul |
|
if exist "%MOUNTDIR%" rmdir /s /q "%MOUNTDIR%" 1>nul 2>nul |
|
if exist "%TEMPDIR%" rmdir /s /q "%TEMPDIR%" 1>nul 2>nul |
|
set MESSAGE=Done |
|
goto :END |
|
|
|
:E_ARCH |
|
set MESSAGE=ERROR: Detected iso architecture does not match Language Pack architecture |
|
goto :END |
|
|
|
:E_LANG |
|
set MESSAGE=ERROR: Detected target iso language does not match Language Pack |
|
goto :END |
|
|
|
:E_BIN |
|
set MESSAGE=ERROR: Could not find binaries folder |
|
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_CREATEISO |
|
set MESSAGE=ERROR: Could not create "%DVDISO%" |
|
goto :END |
|
|
|
:E_OSCDIMG |
|
echo. |
|
echo ============================================================ |
|
echo Remove the temporary directories |
|
echo ============================================================ |
|
echo. |
|
rmdir /s /q "%MOUNTDIR%" 1>nul 2>nul |
|
rmdir /s /q "%TEMPDIR%" 1>nul 2>nul |
|
if exist "%MOUNTDIR%" rmdir /s /q "%MOUNTDIR%" 1>nul 2>nul |
|
if exist "%TEMPDIR%" rmdir /s /q "%TEMPDIR%" 1>nul 2>nul |
|
set MESSAGE=Done. You choose to create final iso file yourself |
|
goto :END |
|
|
|
:END |
|
echo. |
|
echo ============================================================ |
|
echo %MESSAGE% |
|
echo ============================================================ |
|
echo. |
|
echo Press any Key to Exit. |
|
pause >nul |
|
exit |