@ECHO OFF SETLOCAL REM by (Y)urkesha REM Установка обработчика открытия папок в случае монтирования без запуска. SET "FOLDER_OPEN=explorer.exe" REM Начальное обнуление используемых переменных окружения SET "FILE_EXT=" SET "FILE_LOAD=" SET "FIRST_CHAR=" SET "IS_MOUNT=" SET "LAST_CHAR=" SET "MOUNT_MARKER=" SET "MOUNT_PATHS=" SET "WIM_FILE=" SET "WIM_SECTION=" REM Проверка обязательных параметров IF NOT EXIST "%SystemRoot%\system32\imagex.exe" ECHO Не найдена утилита для монтирования!&PAUSE&GOTO END REM Запуск WIMFLTR NET START WIMFLTR>NUL 2>&1 REM Инициализация параметров "по-умолчанию" IF NOT "%~1"=="" (SET "WIM_FILE=%~1") ELSE (ECHO Не указан WIM-файл для монтирования!&PAUSE&START notepad.exe "%SystemRoot%\SYSTEM32\readme_wim_loader.txt"&GOTO END) IF NOT EXIST "%WIM_FILE%" ECHO Не найден WIM-файл!&PAUSE&GOTO END SET "MOUNT_PATHS=%~dpn1" SET "MOUNT_PATHS=%TEMP%\WIM_PRG\DISK_%MOUNT_PATHS::=%" SET "WIM_SECTION=1" REM Присвоение переменных в случае указания параметров через INI-файл. IF "%~2"=="" ( IF EXIST "%~dpn1_wim_par.ini" ( FOR /F "USEBACKQ TOKENS=1* EOL=; DELIMS== " %%a IN ("%~dpn1_wim_par.ini") DO ( IF "%%a"=="FILE_LOAD" (SET "FILE_LOAD=%%b") IF "%%a"=="WIM_SECTION" (SET "WIM_SECTION=%%b") IF "%%a"=="MOUNT_PATHS" (SET "MOUNT_PATHS=%%b") ) ) ) REM Присвоение переменных в случае запуска с указанием всех параметров из командной строки. IF "%~2"=="2" ( IF NOT "%~3"=="" (SET "FILE_LOAD=%~3") ELSE (ECHO Не указан файл для запуска!&PAUSE&START notepad.exe "%SystemRoot%\SYSTEM32\readme_wim_loader.txt"&GOTO END) IF NOT "%~4"=="" (SET "WIM_SECTION=%~4") IF NOT "%~5"=="" (SET "MOUNT_PATHS=%~5") ) REM Отбрасывание последнего символа "\" в пути монтирования SET "LAST_CHAR=%MOUNT_PATHS:~-1%" IF "%LAST_CHAR%"=="\" SET "MOUNT_PATHS=%MOUNT_PATHS:~0,-1%" REM Трансляция переменных окружения в реальные значения FOR /f "usebackq tokens=1 eol=; delims=" %%a IN (`ECHO %MOUNT_PATHS%`) DO SET "MOUNT_PATHS=%%a" REM Отбрасывание первого символа "\" в файле запуска IF DEFINED FILE_LOAD ( SET "FIRST_CHAR=%FILE_LOAD:~0,1%" IF "%FIRST_CHAR%"=="\" SET "FILE_LOAD=%FILE_LOAD:~0%" ) REM Создание точки монтирования IF NOT EXIST "%MOUNT_PATHS%" MD "%MOUNT_PATHS%" IF NOT EXIST "%MOUNT_PATHS%" ECHO Не удалось создать точку монтирования!&PAUSE&GOTO END REM Присвоение маркера монтирования IF DEFINED FILE_LOAD (SET "MOUNT_MARKER=%FILE_LOAD%") ELSE (SET "MOUNT_MARKER=*") REM Проверка существование файла маркера... FOR /R "%MOUNT_PATHS%" %%i IN ("%MOUNT_MARKER%") DO (IF EXIST "%%i" SET "IS_MOUNT=1") REM Монтирование в случае когда файл-маркер не существует... IF NOT "%IS_MOUNT%"=="1" ( "%SystemRoot%\SYSTEM32\imagex.exe" /mount "%WIM_FILE%" %WIM_SECTION% "%MOUNT_PATHS%">nul ) REM Проверка существование файла маркера после монтирования... FOR /R "%MOUNT_PATHS%" %%i IN ("%MOUNT_MARKER%") DO (IF EXIST "%%i" SET "IS_MOUNT=1") REM Проверка существования файла маркера после монтирования IF NOT "%IS_MOUNT%"=="1" (ECHO Не удалось смонтировать WIM-файл!&PAUSE&GOTO END) REM Считывание файла для запуска из внутреннего _wim_par.ini IF NOT DEFINED FILE_LOAD ( IF EXIST "%MOUNT_PATHS%\_wim_par.ini" ( FOR /F "USEBACKQ TOKENS=1* EOL=; DELIMS== " %%a IN ("%MOUNT_PATHS%\_wim_par.ini") DO IF "%%a"=="FILE_LOAD" SET "FILE_LOAD=%%b" ) ELSE (ECHO Не существует описатель запуска _wim_par.ini!&ECHO Поэтому открываю папку...&PAUSE&START "%FOLDER_OPEN%" "%MOUNT_PATHS%\"&GOTO END) ) REM Проверка наличия параметра FILE_LOAD во внутреннем _wim_par.ini IF NOT DEFINED FILE_LOAD (ECHO Описатель запуска _wim_par.ini не содержит параметра FILE_LOAD!&ECHO Поэтому открываю папку...&PAUSE&START "%FOLDER_OPEN%" "%MOUNT_PATHS%\"&GOTO END) REM Проверка существования файла для запуска IF NOT EXIST "%MOUNT_PATHS%\%FILE_LOAD%" (ECHO Файл указанный для запуска не существует!&ECHO Поэтому открываю папку...&PAUSE&START "%FOLDER_OPEN%" "%MOUNT_PATHS%\"&GOTO END) REM Устанавливаю рабочую директорию для исполняемого файла FOR /F "DELIMS=" %%i IN ("%MOUNT_PATHS%\%FILE_LOAD%") DO (CD /D "%%~dpi"&SET "FILE_EXT=%%~xi") REM Запуск программы IF /I "%FILE_EXT%"==".BAT" (START "" /I shellexecute.exe /h "%MOUNT_PATHS%\%FILE_LOAD%") IF /I "%FILE_EXT%"==".CMD" (START "" /I shellexecute.exe /h "%MOUNT_PATHS%\%FILE_LOAD%") ELSE (START "" /I "%MOUNT_PATHS%\%FILE_LOAD%") :END ENDLOCAL EXIT