|
@echo off
rem script: abbodi1406
rem wimlib: synchronicity
title ESD ^<^> WIM
if not exist "%~dp0bin\wimlib-imagex.exe" goto :eof
IF /I "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" (SET "wimlib=%~dp0bin\bin64\wimlib-imagex.exe") ELSE (SET "wimlib=%~dp0bin\wimlib-imagex.exe")
%windir%\system32\reg.exe query "HKU\S-1-5-19" 1>nul 2>nul && (set _admin=1) || (set _admin=0)
setlocal EnableDelayedExpansion
cd /d "%~dp0"
if not "%1"=="" (set "WIMFILE=%~1"&goto :check)
if exist install.esd (set WIMFILE=install.esd&goto :check)
if exist install.wim (set WIMFILE=install.wim&goto :check)
set _esd=0
if exist "*.esd" (for /f "delims=" %%i in ('dir /b "*.esd"') do (call set /a _esd+=1))
if !_esd! NEQ 1 goto :prompt
for /f "delims=" %%i in ('dir /b "*.esd"') do (set "WIMFILE=%%i"&goto :check)
:prompt
echo.
echo ===============================================================================
echo 请输入要处理的 install.esd 文件或者 install.wim 文件的完整路径
echo ^(路径中允许含有空格,不允许含有引号“” ^)
echo ===============================================================================
echo.
set /p "WIMFILE="
if "%WIMFILE%"=="" goto :QUIT
:check
color 1f
bin\wimlib-imagex.exe info "%WIMFILE%" 1>nul 2>nul
IF %ERRORLEVEL% EQU 74 (
cls
echo.
echo ===============================================================================
echo 错误说明: ESD 文件是加密的。
echo ===============================================================================
echo.
echo 请按任意键退出脚本。
pause >nul
goto :eof
)
IF %ERRORLEVEL% NEQ 0 (
cls
echo.
echo ===============================================================================
echo 错误提示:指定的文件不存在或者已经损坏。
echo ===============================================================================
echo.
echo 请按任意键退出脚本。
pause >nul
goto :eof
)
for /f "tokens=3 delims=: " %%i in ('bin\wimlib-imagex.exe info "%WIMFILE%" ^| findstr /c:"Image Count"') do set images=%%i
for /L %%i in (1,1,%images%) do call :setcount %%i
bin\wimlib-imagex.exe info "%WIMFILE%" | findstr /C:"LZMS" >nul && (
set _target=install.wim
set _source=ESD
set _compress=LZX
) || (
set _target=install.esd
set _source=WIM
set _compress=LZMS --solid
)
GOTO :MENU
exit
:setcount
set /a count+=1
for /f "tokens=1* delims=: " %%i in ('bin\wimlib-imagex.exe info "%WIMFILE%" %1 ^| findstr /b /c:"Name"') do set name%count%="%%j"
goto :eof
:MENU
cls
set userinp=
echo ===============================================================================
echo. 检测到 %_source% 文件内包括 %images% 个索引:
echo.
for /L %%i in (1, 1, %images%) do (
echo. %%i. !name%%i!
)
if %_source%==ESD if exist "%CD%\install.wim" goto :E_WIM
echo ===============================================================================
echo. 选项菜单:
echo. 0 - 退出
echo. 1 - 导出第一个索引
if %images% gtr 1 echo. 2 - 导出所有索引
if %images% gtr 1 echo. 3 - 导出连续范围的索引
if %images% gtr 2 echo. 4 - 导出随机指定的索引
if %_admin% equ 1 echo. 5 - 应用单一的索引到其他盘
echo ===============================================================================
set /p userinp= ^> 请输入你的选项代码并按“Enter”键:
set userinp=%userinp:~0,1%
if %userinp%==0 goto :QUIT
if %userinp%==1 goto :SINGLE
if %userinp%==2 if %images% gtr 1 goto :ALL
if %userinp%==3 if %images% gtr 2 goto :RANGE
if %userinp%==4 if %images% gtr 3 goto :RANDOM
if %userinp%==5 if %_admin% equ 1 goto :DEPLOY
GOTO :MENU
:ALL
cls
echo ===============================================================================
echo 正在导出文件 %_source% 的全部索引到 %_target%……
echo ===============================================================================
call :ESD_WARN
echo.
"%wimlib%" export "%WIMFILE%" all %_target% --compress=%_compress%
set ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (echo.&echo 在导出索引时发现错误。&PAUSE&GOTO :QUIT)
echo.
echo 已完成要求的操作。
echo.
echo 请按任意键退出脚本。
pause >nul
GOTO :QUIT
:SINGLE
cls
set _index=
if "%images%"=="1" set _index=1&goto :SINGLEproceed
echo ===============================================================================
echo. 检测到 %_source% 文件内包括 %images% 个索引:
echo.
for /L %%i in (1, 1, %images%) do (
echo. %%i. !name%%i!
)
echo ===============================================================================
echo 请输入想要导出的索引编号,或者按‘0’回到主菜单
echo ===============================================================================
set /p _index= ^>
if "%_index%"=="" goto :SINGLE
if "%_index%"=="0" goto :MENU
if %_index% GTR %images% echo.&echo 所指定的编号大于可用的索引号。&echo.&PAUSE&goto :SINGLE
:SINGLEproceed
cls
echo ===============================================================================
echo 正在转换 %_source% 索引 %_index% 到 %_target%……
echo ===============================================================================
call :ESD_WARN
echo.
"%wimlib%" export "%WIMFILE%" %_index% %_target% --compress=%_compress%
set ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (echo.&echo 在导出索引时发现错误。&PAUSE&GOTO :QUIT)
echo.
echo 已完成要求的操作。
echo.
echo 请按任意键退出脚本。
pause >nul
GOTO :QUIT
:RANGE
cls
set _range=
set _start=
set _end=
echo ===============================================================================
echo. 检测到 %_source% 文件包含 %images% 个索引:
echo.
for /L %%i in (1, 1, %images%) do (
echo. %%i. !name%%i!
)
echo ===============================================================================
echo 请输入要导出的连续的索引编号: 开始-结束
echo 示例: 2-4 或者 1-7 或者 3-4
echo ===============================================================================
echo 输入数字‘0’回到主菜单
echo ===============================================================================
set /p _range= ^>
if "%_range%"=="" goto :RANGE
if "%_range%"=="0" goto :MENU
for /f "tokens=1,2 delims=-" %%i in ('echo %_range%') do set _start=%%i&set _end=%%j
if %_end% GTR %images% echo.&echo 指定范围内的结束序号大于可用的索引。&echo.&PAUSE&goto :RANGE
if %_start% GTR %_end% echo.&echo 指定范围内的开始序号大于结束序号。&echo.&PAUSE&goto :RANGE
if %_start% EQU %_end% echo.&echo 指定范围内的开始序号与结束序号相同。&echo.&PAUSE&goto :RANGE
if %_start% GTR %images% echo.&echo 指定范围内的开始序号大于可用的索引。&echo.&PAUSE&goto :RANGE
cls
echo ===============================================================================
echo 正在导出文件 %_source% %_start% 号 -^> %_end% 号索引到 %_target%……
echo ===============================================================================
call :ESD_WARN
echo.
for /L %%i in (%_start%, 1, %_end%) do (
"%wimlib%" export "%WIMFILE%" %%i %_target% --compress=%_compress%
)
set ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (echo.&echo 在导出索引时发现错误。&PAUSE&GOTO :QUIT)
echo.
echo 已完成要求的操作。
echo.
echo 请按任意键退出脚本。
pause >nul
GOTO :QUIT
:RANDOM
cls
set _count=0
set _index=
echo ===============================================================================
echo. 检测到 %_source% 文件包括 %images% 个索引:
echo.
for /L %%i in (1, 1, %images%) do (
echo. %%i. !name%%i!
)
echo ===============================================================================
echo 请输入要导出的索引编号,使用空格分隔
echo 示例: 1 3 4 或者 5 1 或者 4 2 9
echo ===============================================================================
echo 输入数字‘0’回到主菜单
echo ===============================================================================
set /p _index= ^>
if "%_index%"=="" goto :RANDOM
if "%_index%"=="0" goto :MENU
for %%i in (%_index%) do call :setindex %%i
for /L %%i in (1,1,%_count%) do (
if !_index%%i! GTR %images% echo.&echo 所选的索引编号 !_index%%i! 大于可用的索引号。&echo.&PAUSE&goto :RANDOM
)
cls
echo ===============================================================================
echo 正在导出 %_source% 索引 %_index% 到 %_target%……
echo ===============================================================================
call :ESD_WARN
echo.
for /L %%i in (1,1,%_count%) do (
"%wimlib%" export "%WIMFILE%" !_index%%i! %_target% --compress=%_compress%
)
set ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (echo.&echo 在导出索引时发现错误。&PAUSE&GOTO :QUIT)
echo.
echo 已完成要求的操作。
echo.
echo 请按任意键退出脚本。
pause >nul
GOTO :QUIT
:setindex
set /a _count+=1
set _index%_count%=%1
goto :eof
:DEPLOY
cls
set _index=
if "%images%"=="1" set _index=1&goto :APPLY
echo ===============================================================================
echo. 检测到 %_source% 文件包括 %images% 个索引:
echo.
for /L %%i in (1, 1, %images%) do (
echo. %%i. !name%%i!
)
echo ===============================================================================
echo 请输入所需的索引号来进行应用,或者按‘0’回到主菜单
echo ===============================================================================
set /p _index= ^>
if "%_index%"=="" goto :DEPLOY
if "%_index%"=="0" goto :MENU
if %_index% GTR %images% echo.&echo 所选的索引编号大于可用的索引号。&echo.&PAUSE&goto :DEPLOY
goto :APPLY
:APPLY
cls
set _ltr=
echo ===============================================================================
echo 请输入驱动器盘符来应用映像,例如 F:
echo 请确保该驱动器是有效的,已正确格式化并可以使用。
echo ===============================================================================
echo.
set /p _ltr= ^>
if "%_ltr%"=="" goto :QUIT
echo %_ltr%| findstr /B /E /I "[D-Z]:" >NUL 2>&1
if %errorlevel% neq 0 (echo.&echo 错误说明: 目标驱动器需要有一个驱动器号。&echo.&PAUSE&goto :APPLY)
if not exist "%_ltr%" (echo.&echo 错误说明: 目标驱动器 %_ltr% 不存在。&echo.&PAUSE&goto :APPLY)
cls
echo ===============================================================================
echo 正在将索引 %_index% 应用到驱动器 %_ltr%
echo ===============================================================================
echo.
"%wimlib%" apply "%WIMFILE%" %_index% %_ltr% 2>nul
set ERRORTEMP=%ERRORLEVEL%
IF %ERRORTEMP% NEQ 0 (echo.&echo 在导出索引时发现错误。&PAUSE&GOTO :QUIT)
echo.
echo 请按任意键退出脚本。
pause >nul
GOTO :QUIT
:E_WIM
echo.
echo ===============================================================================
echo 错误提示:在当前文件夹中已经存在一个 install.wim 文件了。
echo ===============================================================================
echo.
echo 请按任意键退出脚本。
pause >nul
GOTO :QUIT
:ESD_WARN
if %_source%==WIM (echo.&echo *** 这将会占用一些时间,较高的 CPU 使用率和 RAM 使用量,请耐心等待***)
goto :eof
:QUIT
goto :eof |
评分
-
查看全部评分
|