[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
Спасибо, понял, надо пробовать. Если не затруднит, еще вопрос:
Подправил как мог скрипт, смущает выделенная строка.
И, если все правильно, скрипт запустит или Install.wim, или install.esd ?
@echo off
SET DD=puh1
SET MM=win7x64
for %%I in (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 (
dir /d %%I:\%DD%\%MM%\install.wim&&set DVDdrive=%%I:
dir /d %%I:\%DD%\%MM%\install.esd&&set DVDdrive=%%I:
)
If NOT "%DVDDrive%"=="" echo Found Install.wim at %DVDdrive%\%DD%\%MM%\install.wim
IF "%DVDdrive%"=="" (

echo ERROR - COULD NOT FIND INSTALL.WIM in %DD%\%MM% folder!
pause
pause
goto :EOF
)
if exist %DVDdrive%\%DD%\%MM%\unattend.xml SET UN=/unattend:%DVDdrive%\%DD%\%MM%\unattend.xml
if exist %DVDdrive%\%DD%\%MM%\OEM\nul SET OEM=/m:%DVDdrive%\%DD%\%MM%\OEM
REM look for whole sources folder copied over
If exist %DVDdrive%\%DD%\%MM%\setup.exe (
%DVDdrive%
REM setup will use its path to find the install.wim
%DVDdrive%\%DD%\%MM%\setup.exe %OEM% %UN%
goto :RBT
)
if not exist X:\Setup.exe goto :BAD
REM if not then just call setup in root of boot.wim
X:\setup.exe /installfrom:%DVDdrive%\%DD%\%MM%\install.wim %OEM% %UN%
X:\setup.exe /installfrom:%DVDdrive%\%DD%\%MM%\install.esd %OEM% %UN%
goto :RBT
:BAD
dir X:\ /b
echo Cannot find X:\Setup.exe !
@echo Press a key to reboot now...
pause
:RBT
wpeutil reboot
pause


Последний раз редактировалось: puhpol (2014-12-15 21:15), всего редактировалось 1 раз

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
puhpol, скрипт должен запустить установщик (т.е., Setup.exe). Выделенная строка выдаёт сообщения, если найден install.wim (install.esd). Там проблем нет. А вот конструкция
X:\setup.exe /installfrom:%DVDdrive%\%DD%\%MM%\install.wim %OEM% %UN%
X:\setup.exe /installfrom:%DVDdrive%\%DD%\%MM%\install.esd %OEM% %UN%
работать не будет (даже если найден install.esd, будет пытаться запустить install.wim - и тут будет ошибка). Правильнее было бы назначить переменную (в примере - %inst%) для install.wim или install.esd. например, так:
dir /d %%I:\%DD%\%MM%\install.wim&&set DVDdrive=%%I:&&set inst=%%I:\%DD%\%MM%\install.wim
dir /d %%I:\%DD%\%MM%\install.esd&&set DVDdrive=%%I:&&set inst=%%I:\%DD%\%MM%\install.esd
и запускать, соответственно сразу нужное
X:\setup.exe /installfrom:%inst% %OEM% %UN%

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
То есть этот кусок будет выглядеть так:
if not exist X:\Setup.exe goto :BAD
dir /d %%I:\%DD%\%MM%\install.wim&&set DVDdrive=%%I:&&set inst=%%I:\%DD%\%MM%\install.wim
dir /d %%I:\%DD%\%MM%\install.esd&&set DVDdrive=%%I:&&set inst=%%I:\%DD%\%MM%\install.esd
X:\setup.exe /installfrom:%inst% %OEM% %UN%
goto :RBT
:BAD
dir X:\ /b
echo Cannot find X:\Setup.exe !
@echo Press a key to reboot now...
pause
:RBT
wpeutil reboot
pause
Подразумевается что в папке лежит один файл , или esd , или wim

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
Вот на бабочке выложили скрипт от korsak7 . Вот то что нужно , насколько я понимаю.
@echo off
SET DD=ИМЯ ПАПКИ
SET MM=ИМЯ ПОДПАПКИ
for %%I in (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 if exist %%I:\%DD%\%MM% set DVDdrive=%%I:
set fullpath=%DVDdrive%\%DD%\%MM%
if exist %fullpath%\install.wim set container=%fullpath%\install.wim
if exist %fullpath%\install.esd set container=%fullpath%\install.esd
IF "%container%"=="" (
echo ERROR - COULD NOT FIND INSTALL.WIM INSTALL.ESD in %DD%\%MM% folder!
pause
pause
goto :EOF
)
if exist %fullpath%\unattend.xml SET UN=/unattend:%fullpath%\unattend.xml
if exist %fullpath%\_unattend.xml SET UN=/unattend:%fullpath%\_unattend.xml
if exist %fullpath%\OEM\nul SET OEM=/m:%fullpath%\OEM
if exist %fullpath%\$OEM$\nul SET OEM=/m:%fullpath%\$OEM$
:: if not exist %SystemDrive%\Setup.exe goto :BAD
:: REM if not then just call setup in root of boot.xxx
:: %SystemDrive%\setup.exe /installfrom:%container% %OEM% %UN%
:: goto :RBT
if not exist X:\Setup.exe goto :BAD
REM if not then just call setup in root of boot.wim
X:\setup.exe /installfrom:%container% %OEM% %UN%
goto :RBT
:BAD
dir X:\ /b
echo Cannot find X:\Setup.exe !
@echo Press a key to reboot now...
pause
:RBT
wpeutil reboot
pause


Последний раз редактировалось: puhpol (2014-12-15 21:16), всего редактировалось 1 раз

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]

Я бы сделал как-то так (скрипт исправлен 15.12.2014)

@echo off
setlocal enabledelayedexpansion
SET DD=2k10
SET MM=Windows.Setup
SET IN=NI
for %%I in (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 IP=%%I:\!DD!\!MM!
dir /d !IP!\install.wim&&set IN=!IP!\install.wim
dir /d !IP!\install.esd&&set IN=!IP!\install.esd
dir /d !IP!\install.swm&&set IN=!IP!\install.swm
IF !IN! NEQ NI goto :INST
)
IF %IN% EQU NI (
echo ERROR - COULD NOT FIND INSTALL.WIM(ESD,SWM) in %DD%\%MM% folder!
pause
pause
goto:RBT
)
:INST
echo %IP%
if exist %IP%\unattend.xml SET UN=/unattend:%IP%\unattend.xml
if exist %IP%\_unattend.xml SET UN=/unattend:%IP%\_unattend.xml
if exist %IP%\OEM\nul SET OEM=/m:%IP%\OEM
if exist %IP%\$OEM$\nul SET OEM=/m:%IP%\$OEM$
set ST=X:\Setup.exe
if exist %IP%\Setup.exe set ST=%IP%\Setup.exe
if not exist %ST% goto :BAD
cd /d %IP%
%ST% /installfrom:%IN% %OEM% %UN%
goto :RBT
:BAD
dir X:\ /b
echo Cannot find %ST% !
echo.
:RBT
exit
@echo Press a key to reboot now...
pause
wpeutil reboot
pause
Отличия от скрипта Корсака:
1. Проверка наличия файла установки организована через DIR (не отрывает окно с ошибкой на отсутсвующих/повреждённых носителях).
2. Поиск ведётся до первого найденного файла с дистрибутивом (в варианте Корсака независимо от результатов поиска перебираются все диски, и используется последний найденный вариант).
3. Поиск производится для всех возможных видов дистрибутива (WIM, ESD, SWM).
4. Если в папке с дистрибутивом имеется Setup.exe, то будет использован именно он, а не X:\Setup.exe

Вариант поиска для использования "внешнего" скрипта установки

@echo off
setlocal enabledelayedexpansion
For /F "skip=2 tokens=2* delims=)" %%i In ('REG QUERY HKLM\SYSTEM\ControlSet001\Control /v SystemStartOptions') DO (
SET FP=%%~pj
set NM=%%~nj
)
set FP=%FP:*)\=%
for %%I in (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 (
dir /d %%I:\%FP%%NM%.wim&&(
if exist %%I:\%FP%%NM%.cmd set (SC=%%I:\%FP%%NM%.cmd&goto:Start)
if exist %%I:\%FP%winsetup.cmd (set SC=%%I:\%FP%winsetup.cmd&goto:Start)
)
)
echo Script not found!!!
pause
exit
:Start
start /w %SC%
exit
Второй скрипт позволяет организовать универсальную установку из любой папки. Как это работает:
1. Скрипт добавляем в ядро РЕ-установщика вместо первого скрипта.
2. РЕ-установщик может находиться в любой папке (естественно, с адекватным путём). Например, РЕ-установщик в папке 2k10\WinSetup.User\setup886.wim.
3. После старта скрипта производится поиск по всем носителям установщика setup886.wim (как маркера) в нужной папке (т.е., 2k10\WinSetup.User). Если рядом (в той же папке) есть файл setup886.cmd (имя должно соовпадать с именем wim-установщика, а расширение cmd) либо winsetup.cmd, тогда управление будет передано этому файлу. Приоритетным является "именной" скрипт (setup886.cmd), т.е., при наличии обоих вариантов выполнен будет именно он. Если рядом с установщиком отсутствуют "именной" или общий (winsetup.cmd) скрипты, поиск будет продолжен.
4. В качестве "именного" или общего скриптов можно использовать первый скрипт этого сообщения, указав в нём желаемую папку хранения своих дистрибутивов.


Последний раз редактировалось: Гость (2014-12-15 21:49), всего редактировалось 6 раз(а)

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
Изменяем файл BOOT.WIM (черновик)
1. Качаем архив "mu.rar", Прикреплен к сообщению,
2. Папку из архива извлекаем в корень диска С.

Что в папке

Папка "imagex" - папка с программой imagex 64- и 32-битными версиями программы.
Файлы:
EI.CFG - нужен для пропуска ввода ключа в boot.wim от Windows 8/8.1 (для Windows 7 не нужен, в этом случае требуется правка Mod.cmd )
Mod.cmd - запускает интеграцию скриптов и файлов в boot.wim
winpeshl.ini - дает команду запуска файла mysetup.cmd при загрузке boot.wim.
mysetup.cmd - запускает файл set7.cmd или set8.cmd в зависимости от вашего выбора.
set7.cmd - файл, запускающий установку Windows 7 (в нашем случае). Необходимо править, прописать имя папки и подпапки.
set8.cmd - файл, запускающий установку Windows 8.1 (в нашем случае). Необходимо править, прописать имя папки и подпапки.
3. Идем по пути: С:\mu\imagex\ видим папки "x32" и "x64", входим в папку в зависимости от установленной системы. И запускаем с правами Администратора файл "install.bat".
После этого переходим в папку С:\mu\
4. Открываем текстовым редактором файл mysetup.cmd и, если вас что-то не устраивает, правим под свои предпочтения.
5. Открываем текстовым редактором файл set7.cmd и во второй и третьей строке прописываем имена папок, из которых будет грузиться система (то-есть, где будет лежать файл install.wim или install.esd).
5.1 Открываем текстовым редактором файл set8.cmd и во второй и третьей строке прописываем имена папок, из которых будет грузиться система (то-есть, где будет лежать файл install.wim или install.esd).
6. Проверить, все ли вы правильно отредактировали. Правильно ли прописаны имена файлов в mysetup.cmd? Правильно ли указанны имена папок в файлах set8.cmd и set7.cmd?
7. Из образа с Windows x86 извлекаем файл boot.wim в папку "mu" (находится в папке "sources").
8. От имени Администратора запускаем файл Mod.cmd. Появится окошко, в котором можно контролировать процесс интеграции файлов в образ (сначала монтируется образ, потом копируются файлы и сохранение изменений). После закрытия окна ваш boot.wim готов.
9. Готовый файл обязательно переименовать или перенести куда нибудь (я просто переименовываю в bootх86.wim). Так как мы изменили загрузчик только для 32-битной системы.
10. Из образа с Windows x64 извлекаем файл boot.wim в папку "mu" (находится в папке "sources").
11. От имени Администратора запускаем файл Mod.cmd. Появится окошко, в котором можно контролировать процесс интеграции файлов в образ (сначала монтируется образ, потом копируются файлы и сохранение изменений). После закрытия окна ваш boot.wim готов.
Таким образом, при загрузке файла boot.wim (предустановочной среды Windows) будет запускаться файл mysetup.cmd, где будет предложено выбрать какую систему ставить. И, в зависимости от вашего выбора, будет запущен файл set8.cmd или set7.cmd.

Если используется boot.wim от Windows 7

Если используется boot.wim от Windows 7 то файл EI.CFG не нужен.
Файл можно не удалять из папки, нужно отредактировать файл Mod.cmd
Открываем файл "Блокнотом" и удаляем выделенные строки.
cls
@echo off
pushd %cd%
REM set the path here
SET MP=%CD%
IF "%MP%"=="\" SET MP=
if not exist %MP%\winpeshl.ini (
echo %MP%\winpeshl.ini not found!
echo This script should be in the same folder as your bootmgrx files
goto :EOF1
)
IF NOT EXIST %MP%\boot.wim (
echo ERROR %MP%\boot.wim does not exist!
goto :EOF1
)
REM to create an empty MOUNT folder
if not exist C:\MOUNT\NUL MD C:\MOUNT
SET IMGNO=2
Echo mounting the 2nd image in the wim file onto your C:\mount folder...
IMAGEX /mountrw %MP%\boot.wim 2 c:\mount
if errorlevel 1 echo IMAGE #2 NOT FOUND IN BOOT.WIM - trying image #1...
if errorlevel 1 SET IMGNO=1
if errorlevel 1 IMAGEX /mountrw %MP%\boot.wim 1 c:\mount
if errorlevel 1 echo IMAGE #1 NOT FOUND
if errorlevel 1 goto :EOF12
echo IMAGE #%IMGNO% mounted OK
echo Copying over the winpeshl.ini and mysetup.cmd files
copy %MP%\winpeshl.ini C:\mount\windows\system32\*.*
if errorlevel 1 goto :EOFERR
copy %MP%\mysetup.cmd C:\mount\windows\system32\*.*
if errorlevel 1 goto :EOFERR
copy %MP%\set7.cmd C:\mount\*.*
if errorlevel 1 goto :EOFERR
copy %MP%\set8.cmd C:\mount\*.*
if errorlevel 1 goto :EOFERR
copy %MP%\EI.CFG C:\mount\sources\*.*
if errorlevel 1 goto :EOFERR

echo Saving changes in boot.wim...
IMAGEX /unmount /commit C:\MOUNT
if errorlevel 1 goto :EOF1
echo Files added to %MP%\boot.wim (image %IMGNO%) OK
goto :EOF
:EOFERR
echo ERROR FOUND - so dismounting boot%IM%.wim without saving any changes!
IMAGEX /unmount C:\MOUNT
goto :EOF
:EOF12
echo ERROR mounting boot&.wim using ImageX !!!
:EOF1
pause
Изучаем выделенное жирным шрифтом.
ПРИМЕЧАНИЯ:
Скриптов для установки системы (set8.cmd и set7.cmd) может быть сколько угодно. Чтобы добавить дополнительные скрипты, нужно дописать их интеграцию в boot.wim в файле Mod.cmd (под спойлером смотрим выделенное жирным, то-есть копировать две строчки с изменением имени файла). Так же требуется редактирование файла mysetup.cmd (там вроде все понятно).
Если скрипты set8.cmd и set7.cmd копировать на носитель, с которого вы будете все это дело загружать. А в папку, где у вас лежит install.wim копировать все содержимое папки "sources" из дистрибутива Windows (кроме boot.wim), при запуске файла set8.cmd или set7.cmd под Windows PE начнется установка Windows. То-есть, запуск set8.cmd запустит установку системы, если запущен под какой-то сборкой (обязательно наличие всего содержимого папки "sources" из дистрибутива Windows.
Так как в скрипте прописан запуск двух вариантов установки: Запуск файла setup.exe из X:\Setup.exe (файл boot.wim, предустановочная среда Windows), или запуск файла setup.exe из указанной в файле set7.cmd папки.
Если вы используете русский образ boot.wim, можно русифицировать скрипты. Для этого: открыть файл mysetup.cmd, например, редактором Notepad++. Выбрать кодировку кирилица/OEM 666 переписать нужные фразы. Повторить действия для set8.cmd и set7.cmd.

Пример mysetup.cmd

TITLE УСТАНОВКА WINDOWS
@echo off
cls
color 27
echo.
echo.
echo 1 = Установить Windows 8.1
echo.
echo 2 = Установить Windows 7
echo.
echo.
SET /P ANS="Какую систему будем ставить? (нажмите 1 или 2 ): "
IF /I "%ANS%"=="1" start X:\set8.cmd
IF /I "%ANS%"=="2" start X:\set7.cmd
pause

set7.cmd

@echo off
SET DD=ИМЯ ПАПКИ
SET MM=ИМЯ ПОДПАПКИ
SET IN=NI
for %%I in (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 IP=%%I:\%DD%\%MM%
dir /d %IP%\install.wim&&set IN=%IP%\install.wim
dir /d %IP%\install.esd&&set IN=%IP%\install.esd
IF %IN% NEQ NI goto:INST
)
IF %IN% EQU NI (
echo ОШИБКА - нет файлов INSTALL.WIM INSTALL.ESD в %DD%\%MM% !
pause
pause
goto:RBT
)
:INST
if exist %IP%\unattend.xml SET UN=/unattend:%IP%\unattend.xml
if exist %IP%\_unattend.xml SET UN=/unattend:%IP%\_unattend.xml
if exist %IP%\OEM\nul SET OEM=/m:%IP%\OEM
if exist %IP%\$OEM$\nul SET OEM=/m:%IP%\$OEM$
set ST=X:\Setup.exe
if exist %IP%\Setup.exe set ST=%IP%\Setup.exe
if not exist %ST% goto :BAD
%ST% /installfrom:%IN% %OEM% %UN%
goto :RBT
:BAD
dir X:\ /b
echo Нет файла %ST% !
echo.
:RBT
@echo Press a key to reboot now...
pause
wpeutil reboot
pause
Если скрипт в русской кодировке интегрировать в английскую версию boot.wim, вместо руских букв будут кракозяблики.


Последний раз редактировалось: puhpol (2014-12-15 11:16), всего редактировалось 1 раз

[Цитировать]

    Andrei888
  • 13
  • Стаж: 9 лет 4 месяца
  • Сообщений: 11
  • Репутация:0

    [+] [-]
  • Откуда: КАЗАКСТАН
Здравствуйте.
Нужно ли все извлекать из папки sources, а что будет если только один файл insatal.wim?

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
zxen, Привет! Спасибо большое! Завтра буду тестить.
894Здравствуйте.
Нужно ли все извлекать из папки sources, а что будет если только один файл insatal.wim?
Приветствую. Если не запускать установку под сборкой какой (ВИН РЕ) то достаточно одного insatal.wim

[Цитировать]

    korsak7
  • 107
  • Стаж: 9 лет 3 месяца
  • Сообщений: 1082
  • Репутация:62

    [+] [-]
891Изменяем файл BOOT.WIM (черновик)
Кстати, WIM-ы умеет изменять 7z - без лишнего шаманства и многостраничных инструкций :)

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
korsak7,
Ваш скрипт мне более понятен. Только я маленько подправил закомментированную вами часть...
@echo off
SET DD=ИМЯ ПАПКИ
SET MM=ИМЯ ПОДПАПКИ
for %%I in (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 if exist %%I:\%DD%\%MM% set DVDdrive=%%I:
set fullpath=%DVDdrive%\%DD%\%MM%
if exist %fullpath%\install.wim set container=%fullpath%\install.wim
if exist %fullpath%\install.esd set container=%fullpath%\install.esd
IF "%container%"=="" (
echo ERROR - COULD NOT FIND INSTALL.WIM INSTALL.ESD in %DD%\%MM% folder!
pause
pause
goto :EOF
)
if exist %fullpath%\unattend.xml SET UN=/unattend:%fullpath%\unattend.xml
if exist %fullpath%\_unattend.xml SET UN=/unattend:%fullpath%\_unattend.xml
if exist %fullpath%\OEM\nul SET OEM=/m:%fullpath%\OEM
if exist %fullpath%\$OEM$\nul SET OEM=/m:%fullpath%\$OEM$
if not exist %fullpath%\Setup.exe goto :BAD
REM if not then just call setup in root of boot.xxx
%fullpath%\setup.exe /installfrom:%container% %OEM% %UN%
goto :RBT
if not exist X:\Setup.exe goto :BAD
REM if not then just call setup in root of boot.wim
X:\setup.exe /installfrom:%container% %OEM% %UN%
goto :RBT
:BAD
dir X:\ /b
echo Cannot find X:\Setup.exe !
@echo Press a key to reboot now...
pause
:RBT
wpeutil reboot
pause


Последний раз редактировалось: puhpol (2014-12-21 13:40), всего редактировалось 1 раз

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
puhpol, подправил свой скрипт на 3-й страничке. Теперь должен работать правильно.

[Цитировать]

    puhpol
  • 2
  • Стаж: 9 лет 4 месяца
  • Сообщений: 888
  • Репутация:73

    [+] [-]
conty9, Доброго времени. Спасибо!
Сам уже пол дня вожусь, да толку мало.
Есть вопрос: А как в CMD заставить использовать или ecd или wim. То-есть, есть ли какое значение, которое заменяло бы значение слова ИЛИ ?

[Цитировать]

    korsak7
  • 107
  • Стаж: 9 лет 3 месяца
  • Сообщений: 1082
  • Репутация:62

    [+] [-]
4. Если в папке с дистрибутивом имеется Setup.exe, то будет использован именно он, а не X:\Setup.exe
Кто в курсе - скажите пару слов - в чем разница между этими вариантами?
гуглить лень al

[Цитировать]

    korsak7
  • 107
  • Стаж: 9 лет 3 месяца
  • Сообщений: 1082
  • Репутация:62

    [+] [-]
953korsak7,
Ваш скрипт мне более понятен. Только я маленько подправил закомментированную вами часть...
По идее надо вообще скрипт переделывать , чтобы переменные с путями DD и MM были вне boot.wim

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
puhpol, заставить-то, думаю, можно... Те же dir или if exist воспримут install.* и обработают правильно... Но ведь переменной нужно передать точное имя с расширением.

Страница 2 из 18


Показать сообщения:    

Текущее время: 28-Мар 18:22

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы