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.
 
 
 

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