Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Задание переменной %DiskRoot% (http://forum.oszone.net/showthread.php?t=198387)

CtrlSoft 02-02-2011 16:07 1602887

Задание переменной %DiskRoot%
 
Нужно экспортировать в AutoIt, командный файл следующего содержания:
Код:

@echo off
FOR %%i IN (C D E F G H I J K L M N O P Q R S T U V W Y Z) DO IF EXIST %%i:\sources\install.wim SET diskroot=%%i:
start /wait X:\setup.exe /installfrom:%diskroot%\sources\install.wim /unattend:%diskroot%\boot\xmls\en-us.xml
exit

Все должно быть в скрытом режиме.
За ранее спасибо.

Creat0R 02-02-2011 18:46 1603001

Код:

$aDrives = DriveGetDrive("ALL")

For $i = 1 To $aDrives[0]
    If DriveStatus($aDrives[$i]) <> "READY" Then
        ContinueLoop
    EndIf

    If FileExists($aDrives[$i] & ':\sources\install.wim') Then
        RunWait('X:\setup.exe /installfrom:' & $aDrives[$i] & ':\sources\install.wim /unattend:' & $aDrives[$i] & ':\boot\xmls\en-us.xml')
    EndIf
Next


CtrlSoft 02-02-2011 19:07 1603016

Creat0R, премного благодарен!

CtrlSoft 03-02-2011 10:08 1603347

Creat0R, странно, не работает... (

Creat0R 03-02-2011 10:15 1603351

Цитата:

Цитата CtrlSoft
не работает »

А так:

Код:

$aDrives = DriveGetDrive("ALL")

For $i = 1 To $aDrives[0]
    If DriveStatus($aDrives[$i]) <> "READY" Then
        ContinueLoop
    EndIf

    If FileExists($aDrives[$i] & '\sources\install.wim') Then
        RunWait('X:\setup.exe /installfrom:' & $aDrives[$i] & '\sources\install.wim /unattend:' & $aDrives[$i] & '\boot\xmls\en-us.xml')
    EndIf
Next

?

madmasles 03-02-2011 10:21 1603353

Цитата:

Цитата CtrlSoft
странно, не работает »

Попробуйте заменить
Код:

;...
If FileExists($aDrives[$i] & ':\sources\install.wim') Then
;...
;на
;...
If FileExists($aDrives[$i] & '\sources\install.wim') Then
;...

PS
А ответ уже есть.

CtrlSoft 03-02-2011 11:24 1603393

Creat0R, madmasles, спасибо. Теперь работает.
Но хотел бы заметить,
Код:

@echo off
FOR %%i IN (C D E F G H I J K L M N O P Q R S T U V W Y Z) DO IF EXIST %%i:\sources\install.wim SET diskroot=%%i:
start /wait X:\setup.exe /installfrom:%diskroot%\sources\install.wim /unattend:%diskroot%\boot\xmls\en-us.xml
exit

у меня start /wait а потом exit. Все дело в том что данный скрипт я запускал через winpeshl.ini, и если не добавить start /wait, программа установки запустится, но тут же перезагрузится пк.

В вашем же скрипте нужно наверное отказаться от wait:
PHP код:

$aDrives DriveGetDrive("ALL")

For 
$i 1 To $aDrives[0]
    If 
DriveStatus($aDrives[$i]) <> "READY" Then
        ContinueLoop
    
EndIf

    If 
FileExists($aDrives[$i] & '\sources\install.wim'Then
        Run
('X:\setup.exe /installfrom:' $aDrives[$i] & '\sources\install.wim /unattend:' $aDrives[$i] & '\boot\xmls\en-us.xml')
    EndIf
Next 

Дело в том что во время тестирования, если я закрывал окно установки Windows, то запускалось повторная установка, но с ошибкой что не найден файл ответов.
Попробую в WinPE...

CtrlSoft 03-02-2011 13:34 1603514

проверил в WinPE. Работает.

setdiskroot.exe:
PHP код:

$aDrives DriveGetDrive("ALL")

For 
$i 1 To $aDrives[0]
    If 
DriveStatus($aDrives[$i]) <> "READY" Then
        ContinueLoop
    
EndIf

    If 
FileExists($aDrives[$i] & '\sources\install.wim'Then
        Run
('X:\setup.exe /installfrom:' $aDrives[$i] & '\sources\install.wim /unattend:' $aDrives[$i] & '\boot\xmls\en-us.xml')
    EndIf
Next 

winpeshl.ini:
Код:

[LaunchApp]
AppPath=%SystemRoot%\Scripts\SetDiskRoot.exe


Появился вопрос, что нужно дописать чтобы перед запуском установки, скрипт проверял есть ли требуемый язык в системе а потом запускала установку с нужным языком?

на пример,
1. Создается переменная для привода.
2. Определяется язык
к примеру ищет папку в X:\sources c названием en-US, если найдена - запускается
Код:

X:\setup /installfrom:%diskroot%\sources\install.wim /unattend:%diskroot%\boot\xmls\en-us.xml
если не найдена - ищет другую папку - ru-RU и запускает команду
Код:

X:\setup /installfrom:%diskroot%\sources\install.wim /unattend:%diskroot%\boot\xmls\ru-ru.xml
?

спасибо

madmasles 03-02-2011 15:04 1603584

Цитата:

Цитата CtrlSoft
скрипт проверял есть ли требуемый язык в системе »

Наверное, можно так попробовать:
Код:

$aDrives = DriveGetDrive("ALL")

For $i = 1 To $aDrives[0]
    If DriveStatus($aDrives[$i]) <> "READY" Then
        ContinueLoop
    EndIf
    If FileExists($aDrives[$i] & '\WINDOWS\explorer.exe') Then
        MsgBox(0, StringUpper($aDrives[$i]), StringLeft(FileGetVersion($aDrives[$i] & '\WINDOWS\explorer.exe', 'DefaultLangCodepage'), 4))
        ;0419 русский
        ;0409 английский
        ; и т.д.
    EndIf
Next


CtrlSoft 02-08-2011 23:35 1724848

потребовалось запустить команду Run с другими параметрами. При этом нужно указать два разных пути, которые требуется определить наличием файлов на диске.
Т.е. переменная №1 - ищем файл в корень диска
переменная №2 - ищем файл из папки в корень диска (\folder\file.wim)

после определения переменных происходит запуск:
%переменная№1%\folder0\folder1\folder2\setup.exe /installfrom:%переменная№2%\folder0\file.wim /unattend:%переменная№1%\folder0\folder1\folder2\file.xml

AZJIO 03-08-2011 06:23 1724932

Язык системы можно определить так:

Код:

$UserIntLang=DllCall ("kernel32.dll", "int", "GetUserDefaultUILanguage" )
If Not @error Then MsgBox(0, 'Язык системы', Hex($UserIntLang[0],4))

проверку существования xml можно так
Код:

If FileExists($aDrives[$i] & '\boot\xmls\en-us.xml') Then
    Run('X:\setup.exe /installfrom:' & $aDrives[$i] & '\sources\install.wim /unattend:' & $aDrives[$i] & '\boot\xmls\en-us.xml')
ElseIf FileExists($aDrives[$i] & '\boot\xmls\ru-ru.xml') Then
    Run('X:\setup.exe /installfrom:' & $aDrives[$i] & '\sources\install.wim /unattend:' & $aDrives[$i] & '\boot\xmls\ru-ru.xml')
EndIf

определение переменных можно так:
Код:

If FileExists($aDrives[$i] & '\переменная№1') And FileExists($aDrives[$i] & '\переменная№2') Then Run(EnvGet('переменная№1')&'\folder0\folder1\folder2\setup.exe /installfrom:'&EnvGet('переменная№2')&'\folder0\file.wim /unattend:'&EnvGet('переменная№1')&'\folder0\folder1\folder2\file.xml')
Хотя последнее я не понял, даже если файлы указаны, то с какой стати переменные будут существовать в системе? Функция EnvGet берёт значение указанной переменной из системы. Если сам файл переменная, то тогда имя подставлять без EnvGet. Вобщем сомневаюсь в ответе, если вопрос нечёткий.


Время: 22:25.

Время: 22:25.
© OSzone.net 2001-