Войти

Показать полную графическую версию : [решено] Скрипт для WIM архивов. Создание-редактирование.


x0r
12-11-2016, 14:47
Скрипт для удобной работы с wim архивами програмкой imagex.exe в Total Commander. Монтирует образ в папку, а папку в диск(subst) и открывает в TotalCommander-e.
Монтировать можно только для чтения или с возм. записи(для чего собсна и задумывалось). Размонтировать тоже, с сохранением результатов или без(понятно, что если был смонтирован read-only, то в любом случае ничего не сохранится).
Т.к. программа imagex.exe работает с драйвером, то есть проверочка на драйвер и если не установлен, то ставится. Потом монтируется образ.
В архиве все есть: программа и драйверы для работы в WinXP и W7. Выше не пробовал. x64 тоже проверял только в WinXP.



@echo off
rem для работы с WIM архивами. Монтирует образы WIM в разных режимах(RO\RW) для изменения или просмотра.
rem на вход скрипту - путь к нужному wim архиву, затем выбрать что делать(монтировать/демонтировать) и дальше
rem диск для subst куда будет подключен каталог с архивом.
rem для демонтажа - тоже путь к архиву и выбрать с записью изменений(WR) или без(5).
rem Все делалось в/для TotalCommander
chcp 866 > nul
if "%1"=="" goto :NoParam
cd /d "%~dp0"
set imgpath=%1
set fpath=%~dp1
set fname=%~n1
set mfolder=%ALLUSERSPROFILE%\WIMmount
rem Указать диск для subst
set vdisk=M
rem echo %1
rem Проверка - установлен ли драйвер WimFltr.sys и если нет - то устанавливает
rem нужна только один раз . Если драйвер установлен - можно закоментировать НАХ !
if not exist "%ProgramFiles(x86)%" goto :CHECK_DRIVER_x86
goto :CHECK_DRIVER_x64
:A
echo ^ ----------------------------------------------------
echo ^ ^| ^|
echo ^ ^| ¤¤¤ Что будем делать (mount/unmount) ? ¤¤¤ ^|
echo ^ ^| ^|
echo ^ ^| 1 - Mount Image ^|
echo ^ ^| 5 - UnMount Image ( Don`t Save Changes ) ^|
echo ^ ^| 9 - Mount Read/Write ^|
echo ^ ^| WR - UnMount ( WRITE Changes ) ^|
echo ^ ----------------------------------------------------
subst
echo Q - exit
set /p S=Сделайте выбор (1 , 5 , 9 , WR)
if /i %S% EQU 1 call :MOUNTRO
if /i %S% EQU 5 call :UMOUNT
if /i %S% EQU 9 call :MOUNTRW
if /i %S% EQU WR call :UMOUNTWR
if /i %S% EQU Q call :EXIT
echo ^ ----------------------------------------------
echo ^ ^| ERROR ! not a valid choice ! ^|
echo ^ ----------------------------------------------
pause
goto A
:MOUNTRO
echo Please Enter Drive letter for "subst" (Virtual Disk)
set /p vdisk=just Letter: M ; o ; W
if not exist "%mfolder%\%fname%" md "%mfolder%\%fname%"
imagex.exe /mount %imgpath% 1 "%mfolder%\%fname%"
if %ERRORLEVEL% neq 0 echo Что-то здесь не так ! Ошибочка - Imagex ERRORLEVEL: %ERRORLEVEL%&pause&exit
if not exist %vdisk%:\nul subst %vdisk%: "%mfolder%"
start "" %COMMANDER_PATH%\TOTALCMD.EXE /O /T /S /R=%vdisk%:\
exit
:MOUNTRW
echo Please Enter Drive letter for "subst" (Virtual Disk)
set /p vdisk=just Letter: M ; o ; W
if not exist "%mfolder%\%fname%" md "%mfolder%\%fname%"
imagex.exe /mountrw %imgpath% 1 "%mfolder%\%fname%"
if %ERRORLEVEL% neq 0 echo Что-то здесь не так ! Ошибочка - Imagex ERRORLEVEL: %ERRORLEVEL%&pause&exit
if not exist %vdisk%:\nul subst %vdisk%: %mfolder%
start "" %COMMANDER_PATH%\TOTALCMD.EXE /O /T /S /R=%vdisk%:\
exit
:UMOUNT
imagex.exe /unmount "%mfolder%\%fname%" && rd /s /q "%mfolder%\%fname%"
pause
exit
:UMOUNTWR
imagex.exe /unmount /commit "%mfolder%\%fname%" && rd /s /q "%mfolder%\%fname%"
pause
exit
rem **************************************************************************************************** **********************
:CHECK_DRIVER_x86
driverquery|find /i "wimfltr" > nul
if %ERRORLEVEL%==0 goto A else (
echo *************************************************************
echo ^ У Вас не установлен необходимый для работы драйвер !
echo ^ Сейчас поставлю... ;-]
echo *************************************************************
if exist %ProgramData% (
start/wait %SYSTEMROOT%\System32\InfDefaultInstall.exe %~dp0x86\wimfltr.inf
) else (
start/wait %SYSTEMROOT%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %~dp0x86\wimfltr.inf
)
echo Подождите пока закончится процесс установки драйвера ...
echo Когда закроется окно устaновщика нажмите любую клавишу...
)
pause
goto A
rem **************************************************************************************************** **********************
:CHECK_DRIVER_x64
driverquery|find /i "wimfltr" > nul
if %ERRORLEVEL%==0 goto A else (
echo *************************************************************
echo ^ У Вас не установлен необходимый для работы драйвер !
echo ^ Сейчас поставлю... ;-]
echo *************************************************************
if exist %ProgramData% (
start/wait %SYSTEMROOT%\System32\InfDefaultInstall.exe %~dp0x64\wimfltr.inf
) else (
start/wait %SYSTEMROOT%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %~dp0x64\wimfltr.inf
)
echo Подождите пока закончится процесс установки драйвера ...
echo Когда закроется окно устaновщика нажмите любую клавишу...
)
pause
goto A
rem **************************************************************************************************** **********************
:NoParam
echo ^===================================
echo %~nx0. Command Line ERROR "%*"
echo ====================================
exit /b 1
:EXIT
exit


+ скриптег для создания WIM архивов из папки. Можно добавить в конт. меню или кнопку в TotalCommander. В путях не должно быть пробелов.

imagex+scripts download (http://gavitex.com/share/lqm1p5z8h)

oz84
13-11-2016, 10:30
x0r, вы не пробовали wimlib (https://wimlib.net/)?

x0r
14-11-2016, 16:43
не, не слышал. Хорошая штука, забрал. Есть тут штука /optimise полезная. А то странные эти WIM архивы: при редактировании-удалении размер растет. Доводишь до нужного(работает как надо), а потом надо перепаковывать в новый архив, шобы размер уменьшить. Эта wimlib вроде справляется, уменьшает готовый архив.
буду пробовать.

Iska
14-11-2016, 20:27
А то странные эти WIM архивы: при редактировании-удалении размер растет. »
Как работают базы данных — слышали? С реестром доводилось работать?

x0r
14-11-2016, 22:31
Не-а ;) я тока ручками и трошки батниками. Если есть описание особенностей, причин "почему" - яб почитал.

Iska
15-11-2016, 00:19
x0r, причина ровно одна — производительность. Особенности: данные реально не удаляются, а лишь помечаются как удалённые; запись единицы данных увеличенного объёма (по отношению к старой) производится как пометка на удаление старой единицы данных и добавление новой единицы данных. Варианты реализации могут отличаться друг от друга в зависимости от формата базы и используемой модели (реляционная, иерархическая) данных. Для реального удаления (и, соответственно, уплотнения данных) используется отдельная, занимающая достаточно много времени, операция, поскольку требует чтения и записи всего объёма данных.

x0r
15-11-2016, 01:51
Понял. Удивляться больше не буду. буду читать, изучать. Ключевых слов дадено достаточно.
Благодарю.




© OSzone.net 2001-2012