无忧启动论坛

标题: WIM转ESD有没有快速的工具或脚本 [打印本页]

作者: soso000111    时间: 2022-6-9 20:52
标题: WIM转ESD有没有快速的工具或脚本
DISM++的WIM转ESD太慢了,有没有快速点的WIM转ESD的软件推荐下,谢谢!

作者: gailium    时间: 2022-6-9 21:00
wimlib-imagex export install.wim all install.esd --solid --threads=(最大线程数的一半)
作者: 邪恶海盗    时间: 2022-6-9 21:10
换更强大的CPU...
作者: 2012雨晨绿软    时间: 2022-6-9 21:14
gailium 发表于 2022-6-9 21:00
wimlib-imagex export install.wim all install.esd --solid --threads=(最大线程数的一半)

这个程序转换的不标准还是推荐微软的DISM
作者: 2012雨晨绿软    时间: 2022-6-9 21:15
dism.exe /export-image /sourceimagefile:D:\install.wim /sourceindex:1 /destinationimagefile:D:\install.esd /compress:recovery /checkintegrity
作者: 我是小青蛙    时间: 2022-6-9 21:19
除了更强性能的电脑没发现什么能加快转换
作者: gailium    时间: 2022-6-9 21:21
2012雨晨绿软 发表于 2022-6-9 21:15
dism.exe /export-image /sourceimagefile:D:\install.wim /sourceindex:1 /destinationimagefile:D:\insta ...

dism和++一样慢
uupdump官方脚本用的wimlib,你说呢?
作者: 2012雨晨绿软    时间: 2022-6-9 21:27
gailium 发表于 2022-6-9 21:21
dism和++一样慢
uupdump官方脚本用的wimlib,你说呢?

我测试过很多解包或安装工具不能正确释放
作者: gailium    时间: 2022-6-9 21:29
2012雨晨绿软 发表于 2022-6-9 21:27
我测试过很多解包或安装工具不能正确释放

dism本身可以释放,连7zip都行
你是不是参数错了?solid是chunk必须为64mb,必须是lzms算法
作者: 2012雨晨绿软    时间: 2022-6-9 21:31
gailium 发表于 2022-6-9 21:29
dism本身可以释放,连7zip都行
你是不是参数错了?solid是chunk必须为64mb,必须是lzms算法

我很早就测试过后来老老实实用DISM
作者: gailium    时间: 2022-6-9 21:35
2012雨晨绿软 发表于 2022-6-9 21:31
我很早就测试过后来老老实实用DISM

可以试试先wimlib导再dism,这样大部分数据块都可以直接跳过
另 dism是不是不能限制线程 dism慢很大程度上是因为他跑满线程然后把内存占满了
作者: 2012雨晨绿软    时间: 2022-6-9 21:50
gailium 发表于 2022-6-9 21:35
可以试试先wimlib导再dism,这样大部分数据块都可以直接跳过
另 dism是不是不能限制线程 dism慢很大程度 ...

再怎么更新也不会超过微软自身的工具,
作者: 超逸绝尘    时间: 2022-6-9 22:01
可以放到固态硬盘上转
作者: fulibo    时间: 2022-6-9 22:18
放到内存盘!速度快一点
作者: andyrave    时间: 2022-6-9 23:47
吃机器性能的  别无他法
作者: Ytqing    时间: 2022-6-10 08:48
dism /export-image /ScratchDir:D:\temp /sourceimagefile:"F:i\nstall.wim /sourceindex:1 /destinationimagefile:"F:\install.esd" /compress:recovery
其中
/ScratchDir:D:\temp
为临时目录 建议设置
这样可以减少内存使用
在此期间cpu会满载
转换时间根据cpu配置有所不同
极限固实压缩


作者: Xxiang51    时间: 2022-6-10 09:08
esd格式好吗,比wim安装起来要慢吧
作者: ppll2030    时间: 2022-6-10 09:31
Xxiang51 发表于 2022-6-10 09:08
esd格式好吗,比wim安装起来要慢吧

方便储存吧,精简版系统安装在固态盘没感觉有啥差别。原版的就不知道了
作者: qingyi78    时间: 2022-6-10 13:47
@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
作者: qingyi78    时间: 2022-6-10 13:49
上面是我一直在用的,没出过错。另外BIN文件夹里有些文件需要自行补充




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3