MAKEWINPE_CONFIG.BAT
@ECHO OFF REM ------------------------------------------------------------------ REM - REM - 윈도우PE ISO 파일 생성 스크립트 설정 파일 REM - REM - 스크립트 실행 전에 REM - https://learn.microsoft.com/ko-kr/windows-hardware/get-started/adk-install REM - 에서 Windows ADK와 Windows PE 추가 기능을 같이 다운로드 받아 REM - 1. adksetup.exe /installpath C:\ADK /features OptionId.DeploymentTools REM - 2. adkwinpesetup.exe REM - 순서로 설치한다. REM - REM ------------------------------------------------------------------ REM ------------------------------------------------------------------ REM - 기본 설정 변수 REM ------------------------------------------------------------------ SET "CURRENT_DIR=%CD%" SET "DST_ARCH=amd64" SET "WORK_DIR=D:\WinPE_%DST_ARCH%" SET "ISO_FILE=%WORK_DIR%\winpe_test.iso" SET "WIM_FILE=E:\sources\install.wim" IF EXIST %WORK_DIR% RMDIR /S /Q %WORK_DIR% IF NOT EXIST %WIM_FILE% ( ECHO ERROR: %WIM_FILE% not found. EXIT /B ) REM REM Sets the PROCESSOR_ARCHITECTURE according to native platform. REM IF /I %PROCESSOR_ARCHITECTURE%==x86 ( REM Set the "right" processor architecture IF NOT "%PROCESSOR_ARCHITEW6432%"=="" ( SET PROCESSOR_ARCHITECTURE=%PROCESSOR_ARCHITEW6432% ) ) ELSE IF /I %PROCESSOR_ARCHITECTURE%==arm ( REM Set the "right" processor architecture IF NOT "%PROCESSOR_ARCHITEW6432%"=="" ( SET PROCESSOR_ARCHITECTURE=%PROCESSOR_ARCHITEW6432% ) ) ELSE IF /I %PROCESSOR_ARCHITECTURE%==amd64 ( REM Nothing to do ) ELSE IF /I %PROCESSOR_ARCHITECTURE%==arm64 ( REM Nothing to do ) ELSE ( @echo Not implemented for PROCESSOR_ARCHITECTURE of %PROCESSOR_ARCHITECTURE%. got :EOF ) REM REM Query the 32-bit and 64-bit Registry hive for KitsRoot REM SET regKeyPathFound=1 SET wowRegKeyPathFound=1 SET KitsRootRegValueName=KitsRoot10 REG QUERY "HKLM\Software\Wow6432Node\Microsoft\Windows Kits\Installed Roots" /v %KitsRootRegValueName% 1>NUL 2>NUL || SET wowRegKeyPathFound=0 REG QUERY "HKLM\Software\Microsoft\Windows Kits\Installed Roots" /v %KitsRootRegValueName% 1>NUL 2>NUL || SET regKeyPathFound=0 if %wowRegKeyPathFound% EQU 0 ( if %regKeyPathFound% EQU 0 ( @echo KitsRoot not found, can't set common path for Deployment Tools EXIT /B ) 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 %KitsRootRegValueName%') DO (SET KitsRoot=%%j) REM REM Build the D&I Root from the queried KitsRoot REM SET DandIRoot=%KitsRoot%Assessment and Deployment Kit\Deployment Tools REM REM Construct the path to WinPE directory, architecture-independent REM SET WinPERoot=%KitsRoot%Assessment and Deployment Kit\Windows Preinstallation Environment SET WinPERootNoArch=%KitsRoot%Assessment and Deployment Kit\Windows Preinstallation Environment REM REM Construct the path to DISM, Setup and USMT, architecture-independent REM SET WindowsSetupRootNoArch=%KitsRoot%Assessment and Deployment Kit\Windows Setup SET USMTRootNoArch=%KitsRoot%Assessment and Deployment Kit\User State Migration Tool REM REM Constructing tools paths relevant to the current Processor Architecture REM SET DISMRoot=%DandIRoot%\%PROCESSOR_ARCHITECTURE%\DISM SET BCDBootRoot=%DandIRoot%\%PROCESSOR_ARCHITECTURE%\BCDBoot SET ImagingRoot=%DandIRoot%\%PROCESSOR_ARCHITECTURE%\Imaging SET OSCDImgRoot=%DandIRoot%\%PROCESSOR_ARCHITECTURE%\Oscdimg SET WdsmcastRoot=%DandIRoot%\%PROCESSOR_ARCHITECTURE%\Wdsmcast REM REM Now do the paths that apply to all architectures... REM REM Note that the last one in this list should not have a REM trailing semi-colon to avoid duplicate semi-colons REM on the last entry when the final path is assembled. REM SET HelpIndexerRoot=%DandIRoot%\HelpIndexer REM REM Set WSIMRoot. WSIM is x86 only REM SET WSIMRoot=%DandIRoot%\WSIM\x86 REM REM Set ICDRoot. ICD is x86 only REM SET ICDRoot=%KitsRoot%Assessment and Deployment Kit\Imaging and Configuration Designer\x86 REM REM Now buld the master path from the various tool root folders... REM REM Note that each fragment above should have any required trailing REM semi-colon as a delimiter so we do not put any here. REM REM Note the last one appended to NewPath should be the last one REM set above in the arch. neutral section which also should not REM have a trailing semi-colon. REM SET NewPath=%DISMRoot%;%ImagingRoot%;%BCDBootRoot%;%OSCDImgRoot%;%WdsmcastRoot%;%HelpIndexerRoot%;%WSIMRoot%;%WinPERoot%;%ICDRoot% SET PATH=%NewPath:"=%;%PATH% REM REM Set current directory to DandIRoot REM cd /d "%DandIRoot%" cd /d "%CURRENT_DIR%"
MAKEWINPE.BAT
@ECHO OFF REM ------------------------------------------------------------------ REM - REM - 윈도우PE ISO 파일 생성 스크립트 REM - REM - 이 스크립트는 윈도우 10 PE의 ISO를 생성한다. REM - REM ------------------------------------------------------------------ REM ======================================= REM ■ CODEPAGE를 UTF-8로 변경 REM ======================================= CHCP 65001 1> NUL 2> NUL REM ------------------------------------------------------------------ REM - 설정파일 읽어오기 REM ------------------------------------------------------------------ SET "CONFIG_BATCH_FILE=MAKEWINPE_CONFIG.BAT" IF NOT EXIST %CONFIG_BATCH_FILE% ( ECHO %CONFIG_BATCH_FILE% 파일이 없습니다. EXIT /B 1 ) CALL %CONFIG_BATCH_FILE% ECHO. ECHO ########################################################### ECHO # ECHO # COPYPE %DST_ARCH% %WORK_DIR% ECHO # ECHO ########################################################### CALL COPYPE %DST_ARCH% %WORK_DIR% IF %ERRORLEVEL% NEQ 0 ( ECHO ERROR: COPYPE EXIT /B ) ECHO. ECHO ########################################################### ECHO # ECHO # 불필요한 파일 삭제 ECHO # ECHO ########################################################### FOR /F "TOKENS=*" %%A IN ('DIR /B /ON %WORK_DIR%\media\??-??') DO ( RMDIR /S /Q %WORK_DIR%\media\%%A ) FOR /F "TOKENS=*" %%A IN ('DIR /B /ON %WORK_DIR%\media\??-*-??') DO ( RMDIR /S /Q %WORK_DIR%\media\%%A ) ECHO. ECHO ########################################################### ECHO # ECHO # 마운트 %WORK_DIR%\media\sources\boot.wim → %WORK_DIR%\mount ECHO # DISM /mount-image /imagefile:%WORK_DIR%\media\sources\boot.wim /index:1 /mountdir:%WORK_DIR%\mount ECHO # ECHO ########################################################### DISM /mount-image /imagefile:%WORK_DIR%\media\sources\boot.wim /index:1 /mountdir:%WORK_DIR%\mount IF %ERRORLEVEL% NEQ 0 ( ECHO ERROR: mount EXIT /B ) ECHO. ECHO ########################################################### ECHO # ECHO # 기본언어를 한국어로 변경 ECHO # ECHO ########################################################### BCDEDIT /store %WORK_DIR%\media\Boot\BCD /set {bootmgr} locale ko-KR DISM /image:"%WORK_DIR%\mount" /add-package /packagepath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\WinPE-FontSupport-KO-KR.cab" DISM /image:"%WORK_DIR%\mount" /add-package /packagepath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\ko-kr\lp.cab" DISM /image:"%WORK_DIR%\mount" /set-allintl:ko-kr DISM /image:"%WORK_DIR%\mount" /Set-TimeZone:"Korea Standard Time" DEL /F /Q %WORK_DIR%\WinPE-FontSupport-KO-KR.cab DEL /F /Q %WORK_DIR%\lp.cab ECHO. ECHO ########################################################### ECHO # ECHO # Default 하이브 수정 (명령프롬프트 옵션 편집) ECHO # ECHO ########################################################### IF NOT EXIST %WORK_DIR%\mount\Windows\system32\config\default ( ECHO %WORK_DIR%\mount\Windows\system32\config\default NOT FOUND. DISM /unmount-image /mountdir:%WORK_DIR%\mount EXIT /B ) REG LOAD HKU\tmp %WORK_DIR%\mount\Windows\system32\config\default REG ADD HKU\tmp\Console /v screenbuffersize /t REG_DWORD /d 13107290 /f REG ADD HKU\tmp\Console /v WindowSize /t REG_DWORD /d 2621530 /f REG ADD HKU\tmp\Console /v historybuffersize /t REG_DWORD /d 90 /f REG ADD HKU\tmp\Console /v NumberOfHistoryBuffers /t REG_DWORD /d 10 /f REG ADD HKU\tmp\Console /v HistoryNoDup /t REG_DWORD /d 1 /f REG ADD HKU\tmp\Console /v FontFamily /t REG_DWORD /d 54 /f REG ADD HKU\tmp\Console /v FontSize /t REG_DWORD /d 917504 /f REG ADD HKU\tmp\Console /v FontWeight /t REG_DWORD /d 400 /f REG ADD HKU\tmp\Console /v FaceName /t REG_SZ /d "굴림체" /f REG UNLOAD HKU\tmp ECHO. ECHO ########################################################### ECHO # ECHO # Optional components 추가 ECHO # ECHO ########################################################### ECHO. ECHO ----------------------------------------------------------- ECHO - PowerShell ECHO ----------------------------------------------------------- Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\WinPE-WMI.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\ko-kr\WinPE-WMI_ko-kr.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\WinPE-NetFX.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\ko-kr\WinPE-NetFX_ko-kr.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\WinPE-Scripting.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\ko-kr\WinPE-Scripting_ko-kr.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\WinPE-PowerShell.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\ko-kr\WinPE-PowerShell_ko-kr.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\WinPE-StorageWMI.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\ko-kr\WinPE-StorageWMI_ko-kr.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\WinPE-DismCmdlets.cab" Dism /Add-Package /Image:"%WORK_DIR%\mount" /PackagePath:"%WinPERoot%\%DST_ARCH%\WinPE_OCs\ko-kr\WinPE-DismCmdlets_ko-kr.cab" ECHO. ECHO ########################################################### ECHO # ECHO # 패지지 목록 확인 ECHO # ECHO ########################################################### DISM /image:"%WORK_DIR%\mount" /get-packages ECHO. ECHO ########################################################### ECHO # ECHO # 언어 확인 ECHO # ECHO ########################################################### DISM /image:"%WORK_DIR%\mount" /get-intl ECHO. ECHO ########################################################### ECHO # ECHO # 언마운트 ECHO # DISM /unmount-image /mountdir:%WORK_DIR%\mount /commit ECHO # ECHO ########################################################### DISM /unmount-image /mountdir:%WORK_DIR%\mount /commit IF %ERRORLEVEL% NEQ 0 ( ECHO ERROR: unmount EXIT /B ) sync ECHO. ECHO ########################################################### ECHO # ECHO # boot.wim 파일을 추출하여 용량 최적화 ECHO # DISM /export-image /sourceimagefile:%WORK_DIR%\media\sources\boot.wim /sourceindex:1 /destinationimagefile:%WORK_DIR%\boot.wim ECHO # ECHO ########################################################### DIR "%WORK_DIR%\media\sources\boot.wim" DISM /export-image /sourceimagefile:%WORK_DIR%\media\sources\boot.wim /sourceindex:1 /destinationimagefile:%WORK_DIR%\boot.wim COPY /Y "%WORK_DIR%\boot.wim" "%WORK_DIR%\media\sources\boot.wim" DIR "%WORK_DIR%\media\sources\boot.wim" ECHO ########################################################### ECHO # ECHO # ISO 파일 생성 ECHO # ECHO ########################################################### IF EXIST %ISO_FILE% DEL /F /Q %ISO_FILE% CALL MAKEWINPEMEDIA /iso %WORK_DIR% %ISO_FILE% IF %ERRORLEVEL% NEQ 0 ( ECHO ERROR: MAKEWINPEMEDIA EXIT /B ) DEL /F /Q "%WORK_DIR%\boot.wim" CD /D %CURRENT_DIR% PAUSE