├── png └── imageproc.png ├── README.md └── imageproc.cmd /png/imageproc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/joshuacline/imageconverter/HEAD/png/imageproc.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | - Support for: 2 | - WIM to VHDX 3 | - VHDX to WIM 4 | - WIM to WIM (isolate index) 5 | - ![Alt text](/png/imageproc.png "imageproc") 6 | -------------------------------------------------------------------------------- /imageproc.cmd: -------------------------------------------------------------------------------- 1 | ::Image Processor (C) Joshua Cline - All rights reserved 2 | @ECHO OFF&&SETLOCAL ENABLEDELAYEDEXPANSION&&CD /D "%~DP0"&&Reg.exe query "HKU\S-1-5-19\Environment">NUL 3 | IF NOT "%ERRORLEVEL%" EQU "0" ECHO Right-Click ^& Run As Administrator&&PAUSE&&EXIT 0 4 | SET "##="&&SET "#$="&&SET "#@="&&FOR /F "TOKENS=*" %%a in ('ECHO %CD%') DO (SET "IMAGE_FOLDER=%%a") 5 | SET "CAPS_SET=IMAGE_FOLDER"&&SET "CAPS_VAR=%IMAGE_FOLDER%"&&CALL:CAPS_SET 6 | SET "CHAR_STR=%IMAGE_FOLDER%"&&SET "CHAR_CHK= "&&CALL:CHAR_CHK 7 | IF DEFINED CHAR_FLG ECHO Remove the space from the path\folder name, then launch again&&PAUSE&&EXIT 0 8 | TITLE Download more scripted utilities from github.com/joshuacline 9 | :IMAGE_PROCESSOR 10 | CLS&&FOR %%a in (PACK_XLVL WIM_XLVL) DO (IF NOT DEFINED %%a SET "%%a=FAST") 11 | FOR %%a in (WIM_XXX PAK_XXX IMAGEPROC_SLOT) DO (IF NOT DEFINED %%a SET "%%a=1") 12 | IF NOT DEFINED VHDX_XLVL SET "VHDX_XLVL=DISABLED" 13 | IF NOT DEFINED SOURCE_TYPE SET "SOURCE_TYPE=WIM"&&SET "TARGET_TYPE=VHDX" 14 | IF NOT DEFINED VHDX_SIZE SET "VHDX_SIZE=25600" 15 | FOR %%a in (WIM_SOURCE VHDX_SOURCE) DO (SET "OBJ_FLD=%IMAGE_FOLDER%"&&CALL SET "OBJ_CHK=%%a"&&CALL:OBJ_CLEAR) 16 | FOR %%a in (WIM_SOURCE VHDX_SOURCE WIM_TARGET VHDX_TARGET) DO (IF NOT DEFINED %%a SET "%%a=SELECT") 17 | IF "%WIM_SOURCE%"=="SELECT" SET "WIM_DESC=NULL"&&SET "WIM_INDEX=1" 18 | CALL:PAD_LINE&&ECHO Image Processing&&CALL:PAD_LINE 19 | ECHO Place WIM/VHDX files in the same folder as this script&&CALL:PAD_LINE 20 | IF "%SOURCE_TYPE%"=="WIM" IF NOT "%WIM_SOURCE%"=="SELECT" CALL:WIM_INDEX_QUERY 21 | IF NOT DEFINED WIM_DESC SET "WIM_DESC=NULL"&&SET "WIM_INDEX=1" 22 | IF "%SOURCE_TYPE%"=="WIM" IF "%TARGET_TYPE%"=="VHDX" ECHO WIM (%##%X%#$%) VHDX&&CALL:PAD_LINE 23 | IF "%SOURCE_TYPE%"=="WIM" IF "%TARGET_TYPE%"=="WIM" ECHO WIM (%##%X%#$%) WIM&&CALL:PAD_LINE 24 | IF "%SOURCE_TYPE%"=="VHDX" IF "%TARGET_TYPE%"=="WIM" ECHO VHDX (%##%X%#$%) WIM&&CALL:PAD_LINE 25 | IF "%SOURCE_TYPE%"=="VHDX" ECHO AVAILABLE VHDX'S:&&SET "BLIST=VHDX"&&CALL:FILE_LIST&&CALL:PAD_LINE&&ECHO. (%##%S%#$%)ource[%#@%VHDX%#$%] [%#@%%VHDX_SOURCE%%#$%]&&CALL:PAD_LINE 26 | IF "%SOURCE_TYPE%"=="WIM" ECHO AVAILABLE WIM'S:&&SET "BLIST=WIM"&&CALL:FILE_LIST&&CALL:PAD_LINE&&ECHO. (%##%S%#$%)ource[%#@%WIM%#$%] [%#@%%WIM_SOURCE%%#$%] (%##%I%#$%)ndex[%#@%%WIM_INDEX%%#$%] [Edition[%#@%%WIM_DESC%%#$%]&&CALL:PAD_LINE 27 | IF "%TARGET_TYPE%"=="VHDX" ECHO EXISTING VHDX'S:&&SET "BLIST=VHDX"&&CALL:FILE_LIST&&CALL:PAD_LINE&&ECHO. (%##%T%#$%)arget[%#@%VHDX%#$%] [%#@%%VHDX_TARGET%%#$%] (%##%G%#$%)o^^! (%##%V%#$%)Size[%#@%%VHDX_SIZE%MB%#$%] (%##%Z%#$%)[%#@%%VHDX_XLVL%%#$%]&&CALL:PAD_LINE 28 | IF "%TARGET_TYPE%"=="WIM" ECHO EXISTING WIM'S:&&SET "BLIST=WIM"&&CALL:FILE_LIST&&CALL:PAD_LINE&&ECHO. (%##%T%#$%)arget[%#@%WIM%#$%] [%#@%%WIM_TARGET%%#$%] (%##%G%#$%)o^^! (%##%Z%#$%)[X-Lvl[%#@%%WIM_XLVL%%#$%]&&CALL:PAD_LINE 29 | ECHO Press (%##%Q%#$%) to quit&&CALL:MENU_SELECT 30 | IF NOT DEFINED SELECT GOTO:IMAGE_PROCESSOR 31 | IF "%SELECT%"=="Q" EXIT 0 32 | IF "%SELECT%"=="X" CALL:IMAGEPROC_SLOT 33 | IF "%SELECT%"=="T" CALL:IMAGEPROC_PROMPT 34 | IF "%SELECT%"=="Z" CALL:IMAGEPROC_XLVL 35 | IF "%SELECT%"=="S" CALL:IMAGEPROC_PICK&&SET "SELECT=" 36 | IF "%SELECT%"=="V" CALL:IMAGEPROC_VSIZE&&SET "SELECT=" 37 | IF "%SELECT%"=="I" IF "%SOURCE_TYPE%"=="WIM" IF NOT "%WIM_SOURCE%"=="SELECT" CALL:WIM_INDEX 38 | IF "%SELECT%"=="G" CALL:IMAGEPROC_START&&CALL:PAUSED 39 | GOTO:IMAGE_PROCESSOR 40 | :IMAGEPROC_START 41 | CALL:PAD_LINE&&ECHO Image Processing Start&&CALL:PAD_LINE&&SET "ERR_MSG="&&SET "APPLYDIR_MASTER=V:"&&SET "CAPTUREDIR_MASTER=V:"&&SET "VHDX_MB=%VHDX_SIZE%" 42 | IF "%TARGET_TYPE%"=="VHDX" IF EXIST "%IMAGE_FOLDER%\%VHDX_TARGET%" SET "ERR_MSG=%##%Target %VHDX_TARGET% exists. Try another name or rename the existing file.%#$%"&&GOTO:IMAGEPROC_CLEANUP 43 | IF "%TARGET_TYPE%"=="WIM" IF EXIST "%IMAGE_FOLDER%\%WIM_TARGET%" SET "ERR_MSG=%##%Target %WIM_TARGET% exists. Try another name or rename the existing file.%#$%"&&GOTO:IMAGEPROC_CLEANUP 44 | IF "%SOURCE_TYPE%"=="VHDX" IF "%VHDX_SOURCE%"=="SELECT" SET "ERR_MSG=%##%Source %SOURCE_TYPE% not set.%#$%"&&GOTO:IMAGEPROC_CLEANUP 45 | IF "%TARGET_TYPE%"=="VHDX" IF "%VHDX_TARGET%"=="SELECT" SET "ERR_MSG=%##%Target %TARGET_TYPE% not set.%#$%"&&GOTO:IMAGEPROC_CLEANUP 46 | IF "%SOURCE_TYPE%"=="WIM" IF "%WIM_SOURCE%"=="SELECT" SET "ERR_MSG=%##%Source %SOURCE_TYPE% not set.%#$%"&&GOTO:IMAGEPROC_CLEANUP 47 | IF "%TARGET_TYPE%"=="WIM" IF "%WIM_TARGET%"=="SELECT" SET "ERR_MSG=%##%Target %TARGET_TYPE% not set.%#$%"&&GOTO:IMAGEPROC_CLEANUP 48 | IF EXIST "V:\" SET "ERR_MSG=%##%Drive letter V:\ can NOT be in use. Unmount the Vdisk in use.%#$%"&&GOTO:IMAGEPROC_CLEANUP 49 | IF NOT DEFINED WIM_INDEX SET "WIM_INDEX=1" 50 | IF NOT DEFINED WIM_XLVL SET "WIM_XLVL=FAST" 51 | IF NOT "%VHDX_XLVL%"=="COMPACT" SET "COMPACTX=" 52 | IF "%VHDX_XLVL%"=="COMPACT" SET "COMPACTX= /COMPACT" 53 | CALL:VDISK_DETACH&&IF "%SOURCE_TYPE%"=="WIM" IF "%TARGET_TYPE%"=="WIM" CALL:SCRATCH_CREATE 54 | IF "%SOURCE_TYPE%"=="VHDX" SET "VDISK=%IMAGE_FOLDER%\%VHDX_SOURCE%" 55 | IF "%TARGET_TYPE%"=="VHDX" SET "VDISK=%IMAGE_FOLDER%\%VHDX_TARGET%" 56 | IF "%SOURCE_TYPE%"=="WIM" SET "IMAGE_SRC=%IMAGE_FOLDER%\%WIM_SOURCE%" 57 | IF "%TARGET_TYPE%"=="WIM" SET "IMAGE_TGT=%IMAGE_FOLDER%\%WIM_TARGET%" 58 | IF "%SOURCE_TYPE%"=="VHDX" IF "%TARGET_TYPE%"=="WIM" CALL:VDISK_ATTACH 59 | IF "%SOURCE_TYPE%"=="WIM" IF "%TARGET_TYPE%"=="VHDX" CALL:VDISK_CREATE 60 | IF "%SOURCE_TYPE%"=="WIM" IF "%TARGET_TYPE%"=="WIM" SET "VDISK=%SCRATCHDIR%\SCRATCH.VHDX"&&SET "VHDX_MB=20000"&&CALL:VDISK_CREATE 61 | IF NOT EXIST "V:\" SET "ERR_MSG=%##%Virtual Disk Error. If VHDX refuses mounting, reboot and try again.%#$%"&&CALL:VDISK_DETACH&&GOTO:IMAGEPROC_CLEANUP 62 | IF NOT DEFINED WIM_DESC SET "WIM_DESC=WINDICK" 63 | IF "%SOURCE_TYPE%"=="WIM" IF "%TARGET_TYPE%"=="VHDX" DISM /ENGLISH /APPLY-IMAGE /IMAGEFILE:"%IMAGE_SRC%" /INDEX:%WIM_INDEX% /APPLYDIR:"%APPLYDIR_MASTER%"%COMPACTX% 64 | IF "%SOURCE_TYPE%"=="WIM" IF "%TARGET_TYPE%"=="WIM" DISM /ENGLISH /APPLY-IMAGE /IMAGEFILE:"%IMAGE_SRC%" /INDEX:%WIM_INDEX% /APPLYDIR:"%APPLYDIR_MASTER%" 65 | IF "%TARGET_TYPE%"=="WIM" IF NOT EXIST "%APPLYDIR_MASTER%\*" CALL:VDISK_DETACH&&DEL /F /Q "%IMAGE_FOLDER%\%WIM_TARGET%">NUL 2>&1 66 | IF "%TARGET_TYPE%"=="VHDX" IF NOT EXIST "%APPLYDIR_MASTER%\*" CALL:VDISK_DETACH&&DEL /F /Q "%IMAGE_FOLDER%\%VHDX_TARGET%">NUL 2>&1 67 | IF NOT EXIST "%APPLYDIR_MASTER%\*" CALL:PAD_LINE&&SET "ERR_MSG=%##%Source Extraction Error. If source refuses to extract, reboot and try again.%#$%"&&GOTO:IMAGEPROC_CLEANUP 68 | IF "%TARGET_TYPE%"=="WIM" DISM /ENGLISH /CAPTURE-IMAGE /CAPTUREDIR:"%CAPTUREDIR_MASTER%" /IMAGEFILE:"%IMAGE_TGT%" /COMPRESS:%WIM_XLVL% /NAME:%WIM_DESC% 69 | CALL:VDISK_DETACH>NUL 2>&1 70 | :IMAGEPROC_CLEANUP 71 | IF DEFINED ERR_MSG ECHO.&&ECHO %ERR_MSG% 72 | ECHO.&&CALL:SCRATCH_DELETE&&CALL:PAD_LINE&&ECHO Image Processing Complete&&CALL:PAD_LINE 73 | EXIT /B 74 | :MENU_SELECT 75 | SET "SELECT="&&SET /P "SELECT=$>>" 76 | IF DEFINED SELECT SET "CAPS_SET=SELECT"&&SET "CAPS_VAR=%SELECT%"&&CALL:CAPS_SET 77 | CALL SET "$ELECTMP=%%$ITEM%SELECT%%%"&&IF DEFINED SELECT CALL SET "$ELECT=%SELECT%" 78 | IF DEFINED SELECT IF DEFINED $ELECTMP CALL SET "$ELECT$=%$ELECTMP%" 79 | EXIT /B 80 | :PROMPT_SET 81 | IF NOT DEFINED PROMPT_SET SET "PROMPT_SET=SELECT" 82 | SET "PROMPT_VAR="&&SET /P "PROMPT_VAR=$>>" 83 | SET "CAPS_SET=%PROMPT_SET%"&&SET "CAPS_VAR=%PROMPT_VAR%" 84 | IF DEFINED PROMPT_ANY CALL SET "%CAPS_SET%=%CAPS_VAR%" 85 | IF NOT DEFINED PROMPT_ANY CALL:CAPS_SET 86 | SET "PROMPT_ANY="&&SET "PROMPT_SET="&&SET "PROMPT_VAR=" 87 | EXIT /B 88 | :CAPS_SET 89 | FOR %%G 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 (CALL SET "CAPS_VAR=%%CAPS_VAR:%%G=%%G%%") 90 | CALL SET "%CAPS_SET%=%CAPS_VAR%"&&SET "CAPS_SET="&&SET "CAPS_VAR=" 91 | EXIT /B 92 | :CHAR_CHK 93 | FOR %%a in (CHAR_STR CHAR_CHK) DO (IF NOT DEFINED %%a EXIT /B) 94 | SET "CHAR_FLG="&&FOR /F "DELIMS=" %%$ in ('CMD.EXE /D /U /C ECHO %CHAR_STR%^| FIND /V ""') do (IF "%%$"=="%CHAR_CHK%" SET "ERROR=1"&&SET "CHAR_FLG=1") 95 | EXIT /B 96 | :CHECK 97 | SET "ERROR="&&IF NOT DEFINED SELECT SET "ERROR=1" 98 | SET "CHAR_CHK= "&&SET "CHAR_STR=%SELECT%"&&CALL:CHAR_CHK 99 | IF "%CHECK%"=="NUM" IF "%SELECT%" LSS "0" SET "ERROR=1" 100 | IF "%CHECK%"=="NUM" IF "%SELECT%" GTR "9999999" SET "ERROR=1" 101 | IF "%CHECK%"=="NUM" SET "CAPS_SET=SELECT"&&SET "CAPS_VAR=%SELECT%"&&CALL:CAPS_SET 102 | IF "%CHECK%"=="NUM" FOR %%G 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 "CHAR_CHK=%%G"&&SET "CHAR_STR=%SELECT%"&&CALL:CHAR_CHK) 103 | SET "CHECK=" 104 | EXIT /B 105 | :OBJ_CLEAR 106 | CALL SET "OBJ_CHKX=%%%OBJ_CHK%%%" 107 | IF NOT EXIST "%OBJ_FLD%\%OBJ_CHKX%" CALL SET "%OBJ_CHK%=SELECT" 108 | EXIT /B 109 | :PAD_LINE 110 | ECHO ===================================================================== 111 | EXIT /B 112 | :PAD_PREV 113 | ECHO Press (%##%Enter%#$%) to return to previous menu 114 | EXIT /B 115 | :PAUSED 116 | SET /P "PAUSED=. Press (%##%Enter%#$%) to continue..." 117 | EXIT /B 118 | :FILE_PICK 119 | IF NOT DEFINED PICK GOTO:PICK_ERROR 120 | CLS&&CALL:PAD_LINE&&ECHO File Picker&&CALL:PAD_LINE&&ECHO AVAILABLE %PICK%'S: 121 | SET "NLIST=%PICK%"&&CALL:FILE_LIST&&CALL:PAD_LINE&&ECHO Select a (%##%#%#$%)&&CALL:PAD_LINE&&CALL:PAD_PREV 122 | FOR %%a in (ERROR SELECT $PICK $ELECT $ELECT$) DO (SET "%%a=") 123 | SET /P "SELECT=$>>"&&FOR %%G 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 (CALL SET "SELECT=%%SELECT:%%G=%%G%%") 124 | IF "%SELECT%" GTR "9999999" SET "ERROR=1" 125 | IF "%SELECT%" LSS "0" SET "ERROR=1" 126 | IF DEFINED ERROR GOTO:PICK_ERROR 127 | CALL SET "$ELECT=%SELECT%"&&CALL SET "$ELECT$=%%$ITEM%SELECT%%%" 128 | IF NOT DEFINED $ELECT$ SET "ERROR=1"&&GOTO:PICK_ERROR 129 | SET "$FOLD=%IMAGE_FOLDER%" 130 | IF NOT EXIST "%$FOLD%\%$ELECT$%" SET "ERROR=1"&&GOTO:PICK_ERROR 131 | IF EXIST "%$FOLD%\%$ELECT$%" SET "$PICK=%$FOLD%\%$ELECT$%" 132 | :PICK_ERROR 133 | SET "PICK="&&IF DEFINED ERROR SET "$PICK=" 134 | EXIT /B 135 | :FILE_LIST 136 | SET "$FOLD="&&FOR %%a in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30) DO (IF DEFINED $ITEM%%a SET "$ITEM%%a=") 137 | IF NOT DEFINED BLIST IF NOT DEFINED NLIST GOTO:FILE_ERROR 138 | IF DEFINED BLIST SET "$MENU=BAS"&&SET "EXT=%BLIST%" 139 | IF DEFINED NLIST SET "$MENU=NUM"&&SET "EXT=%NLIST%" 140 | SET "$FOLD=%IMAGE_FOLDER%\*.%EXT%"&&SET "$LABEL=%IMAGE_FOLDER%"&&ECHO. 141 | IF NOT EXIST "%$FOLD%" ECHO [%#@%EMPTY..%#$%] 142 | IF EXIST "%$FOLD%" SET "$XNT="&&DIR "%$FOLD%" /A: /B /O:GN>$HZ&&FOR /F "TOKENS=*" %%a in ($HZ) DO (IF NOT "%%a"=="$HZ" CALL SET /A "$XNT+=1"&&CALL SET "$CLM$=%%a"&&CALL:FILE_LISTX) 143 | ECHO.&&IF EXIST "$HZ" DEL /F "$HZ">NUL 2>&1 144 | :FILE_ERROR 145 | FOR %%a in (EXT BLIST NLIST CRICKETS NOECHO1 NOECHO2 MENU_INSERTA $MENU $FOLD $LABEL) DO (SET "%%a=") 146 | EXIT /B 147 | :FILE_LISTX 148 | CALL SET "$ITEM%$XNT%=%$CLM$%" 149 | IF "%$MENU%"=="NUM" ECHO [ %##%%$XNT%%#$% ]\[%#@%%$CLM$%%#$%] 150 | IF "%$MENU%"=="BAS" ECHO [%#@%%$LABEL%%#$%]\[%#@%%$CLM$%%#$%] 151 | EXIT /B 152 | :IMAGEPROC_XLVL 153 | IF "%TARGET_TYPE%"=="WIM" CALL:WIM_XLVL 154 | IF "%TARGET_TYPE%"=="VHDX" IF "%VHDX_XLVL%"=="COMPACT" SET "VHDX_XLVL=DISABLED"&&EXIT /B 155 | IF "%TARGET_TYPE%"=="VHDX" IF "%VHDX_XLVL%"=="DISABLED" SET "VHDX_XLVL=COMPACT"&&EXIT /B 156 | EXIT /B 157 | :IMAGEPROC_VSIZE 158 | SET "PROMPT_SET=VHDX_SIZE"&&CALL:PAD_LINE&&ECHO VHDX size?&&CALL:PAD_LINE&&CALL:PAD_PREV&&CALL:PROMPT_SET 159 | SET "SELECT=%VHDX_SIZE%"&&SET "CHECK=NUM"&&CALL:CHECK 160 | IF DEFINED ERROR SET "VHDX_SIZE=25600" 161 | EXIT /B 162 | :IMAGEPROC_PROMPT 163 | IF "%TARGET_TYPE%"=="WIM" CALL:PAD_LINE&&ECHO Name of WIM?&&CALL:PAD_LINE&&CALL:PAD_PREV&&SET "PROMPT_SET=WIM_TARGET"&&SET "PROMPT_ANY=1"&&CALL:PROMPT_SET 164 | IF "%TARGET_TYPE%"=="WIM" IF DEFINED WIM_TARGET SET "WIM_TARGET=%WIM_TARGET%.wim" 165 | IF "%TARGET_TYPE%"=="VHDX" CALL:PAD_LINE&&ECHO Name of VHDX?&&CALL:PAD_LINE&&CALL:PAD_PREV&&SET "PROMPT_SET=VHDX_TARGET"&&SET "PROMPT_ANY=1"&&CALL:PROMPT_SET 166 | IF "%TARGET_TYPE%"=="VHDX" IF DEFINED VHDX_TARGET SET "VHDX_TARGET=%VHDX_TARGET%.vhdx" 167 | EXIT /B 168 | :IMAGEPROC_PICK 169 | IF "%SOURCE_TYPE%"=="WIM" SET "PICK=WIM"&&CALL:FILE_PICK 170 | IF "%SOURCE_TYPE%"=="VHDX" SET "PICK=VHDX"&&CALL:FILE_PICK 171 | CALL SET "%SOURCE_TYPE%_SOURCE=%$ELECT$%" 172 | EXIT /B 173 | :IMAGEPROC_SLOT 174 | SET /A "IMAGEPROC_SLOT+=1" 175 | IF "%IMAGEPROC_SLOT%" GTR "3" SET "IMAGEPROC_SLOT=1" 176 | IF "%IMAGEPROC_SLOT%"=="1" SET "SOURCE_TYPE=WIM"&&SET "TARGET_TYPE=VHDX" 177 | IF "%IMAGEPROC_SLOT%"=="2" SET "SOURCE_TYPE=VHDX"&&SET "TARGET_TYPE=WIM" 178 | IF "%IMAGEPROC_SLOT%"=="3" SET "SOURCE_TYPE=WIM"&&SET "TARGET_TYPE=WIM" 179 | EXIT /B 180 | :WIM_XLVL 181 | SET /A "WIM_XXX+=1" 182 | IF "%WIM_XXX%" GTR "3" SET "WIM_XXX=1" 183 | IF "%WIM_XXX%"=="1" SET "WIM_XLVL=FAST" 184 | IF "%WIM_XXX%"=="2" SET "WIM_XLVL=MAX" 185 | IF "%WIM_XXX%"=="3" SET "WIM_XLVL=NONE" 186 | EXIT /B 187 | :WIM_INDEX 188 | SET /A "WIM_INDEX+=1" 189 | IF "%WIM_INDEX%"=="20" SET "WIM_INDEX=1" 190 | CALL:WIM_INDEX_QUERY 191 | EXIT /B 192 | :WIM_INDEX_QUERY 193 | SET "WIM_DESC="&&DISM /ENGLISH /Get-ImageInfo /ImageFile:"%IMAGE_FOLDER%\%WIM_SOURCE%" /Index:%WIM_INDEX% >"$DISM" 194 | FOR /F "TOKENS=1-5 DELIMS=<> " %%a in ($DISM) DO (IF "%%a"=="Edition" SET "WIM_DESC=%%c") 195 | FOR /F "TOKENS=1-5 DELIMS=<> " %%a in ($DISM) DO (IF "%%a"=="Languages" IF NOT "%%c"=="" SET "WIM_SOURCE=SELECT") 196 | IF NOT DEFINED WIM_DESC SET "WIM_DESC=NULL"&&SET "WIM_INDEX=1" 197 | IF EXIST "$DISM" DEL /Q /F "$DISM">NUL 198 | EXIT /B 199 | :SCRATCH_CREATE 200 | IF NOT DEFINED SCRATCHDIR SET "SCRATCHDIR=%IMAGE_FOLDER%\Scratch" 201 | IF EXIST "%SCRATCHDIR%" SET "SCRATCHDIRX=%SCRATCHDIR%"&&CALL:SCRATCH_DELETE 202 | IF DEFINED SCRATCHDIRX SET "SCRATCHDIR=%SCRATCHDIRX%" 203 | IF NOT EXIST "%SCRATCHDIR%" MD "%SCRATCHDIR%">NUL 2>&1 204 | SET "SCRATCHDIRX=" 205 | EXIT /B 206 | :SCRATCH_DELETE 207 | IF NOT DEFINED SCRATCHDIR SET "SCRATCHDIR=%IMAGE_FOLDER%\Scratch" 208 | IF EXIST "%SCRATCHDIR%" DISM /cleanup-MountPoints>NUL 2>&1 209 | IF EXIST "%SCRATCHDIR%" ATTRIB -R -S -H "%SCRATCHDIR%" /S /D /L>NUL 2>&1 210 | IF EXIST "%SCRATCHDIR%" RD /S /Q "%SCRATCHDIR%">NUL 2>&1 211 | SET "SCRATCHDIR=" 212 | EXIT /B 213 | :VDISK_CREATE 214 | IF NOT DEFINED VDISK EXIT /B 215 | CALL:VDISK_DETACH>NUL 2>&1 216 | IF NOT DEFINED VHDX_MB SET "VHDX_MB=25600" 217 | IF EXIST "%VDISK%" DEL /Q /F "%VDISK%">NUL 2>&1 218 | (ECHO.create vdisk file="%VDISK%" maximum=%VHDX_MB% type=expandable&&ECHO.Select vdisk file="%VDISK%"&&ECHO.Attach vdisk&&ECHO.create partition primary&&ECHO.select partition 1&&ECHO.format fs=ntfs quick&&ECHO.Assign letter=V noerr&&ECHO.Exit)>"$DSK"&&DISKPART /s "$DSK">NUL 2>&1 219 | SET "VHDX_MB="&&DEL /F "$DSK">NUL 2>&1 220 | EXIT /B 221 | :VDISK_ATTACH 222 | SET "VDISK_SYS="&&CALL:VDISK_DETACH>NUL 2>&1 223 | (ECHO.Select vdisk file="%VDISK%"&&ECHO.Attach vdisk&&ECHO.select partition 1&&ECHO.Assign letter=V noerr&&ECHO.Exit)>"$DSK"&&DISKPART /s "$DSK">NUL 2>&1 224 | IF EXIST "V:\WINDOWS" SET "VDISK_SYS=1" 225 | DEL /F "$DSK">NUL 2>&1 226 | EXIT /B 227 | :VDISK_DETACH 228 | (ECHO.Select vdisk file="%VDISK%"&&ECHO.Detach vdisk&&ECHO.Exit)>"$DSK"&&DISKPART /s "$DSK">NUL 2>&1 229 | IF EXIST "V:\" CALL:VDISK_BRUTE 230 | DEL /F "$DSK">NUL 2>&1 231 | EXIT /B 232 | :VDISK_BRUTE 233 | (ECHO.List Volume&&ECHO.Exit)>"$DSK1"&&DISKPART /s "$DSK1">"$DSK2" 234 | SET "DISK_TMP="&&FOR /F "TOKENS=1-9 DELIMS= " %%a IN ($DSK2) DO (IF "%%c"=="V" CALL SET "DISK_TMP=%%b") 235 | (ECHO.Select Volume %DISK_TMP%&&ECHO.Detail Volume&&ECHO.Exit)>"$DSK1"&&DISKPART /s "$DSK1">"$DSK2" 236 | SET "DISK_TMP="&&FOR /F "TOKENS=1-9 DELIMS= " %%a IN ($DSK2) DO ( 237 | IF "%%a"=="Disk" IF NOT "%%b"=="###" SET "DISK_TMP=%%b" 238 | IF "%%a"=="*" IF "%%b"=="Disk" SET "DISK_TMP=%%c") 239 | (ECHO.List Vdisk&&ECHO.Exit)>"$DSK1"&&DISKPART /s "$DSK1">"$DSK2" 240 | SET "VDISK_TMP="&&FOR /F "TOKENS=1-9* DELIMS= " %%a IN ($DSK2) DO (IF "%%a"=="VDisk" IF "%%d"=="%DISK_TMP%" IF EXIST "%%i" SET "VDISK_TMP=%%i") 241 | CALL:PAD_LINE&&CALL ECHO Detaching [%VDISK_TMP%]&&CALL:PAD_LINE 242 | (ECHO.Select vdisk file="%VDISK_TMP%"&&ECHO.Detach vdisk&&ECHO.Exit)>"$DSK1"&&DISKPART /s "$DSK1" >NUL 2>&1 243 | DEL /F "$DSK*">NUL 2>&1 244 | EXIT /B --------------------------------------------------------------------------------