[решено] Задание переменной %DiskRoot%

Аватара пользователя
CtrlSoft

[решено] Задание переменной %DiskRoot%

Сообщение CtrlSoft »

Нужно экспортировать в 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

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

За ранее спасибо.
Аватара пользователя
AZJIO

Re: [решено] Задание переменной %DiskRoot%

Сообщение AZJIO »

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





Код:

Код: Выделить всё

$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. Вобщем сомневаюсь в ответе, если вопрос нечёткий.
Аватара пользователя
Creat0R

Re: [решено] Задание переменной %DiskRoot%

Сообщение Creat0R »

Код:

Код: Выделить всё

$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

Re: [решено] Задание переменной %DiskRoot%

Сообщение CtrlSoft »

Creat0R, премного благодарен!
Аватара пользователя
CtrlSoft

Re: [решено] Задание переменной %DiskRoot%

Сообщение CtrlSoft »

Цитата CtrlSoft:



не работает
[решено] Задание переменной %DiskRoot%




А так:





Код:

Код: Выделить всё

$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

?
Аватара пользователя
Creat0R

Re: [решено] Задание переменной %DiskRoot%

Сообщение Creat0R »

Цитата CtrlSoft:



странно, не работает
[решено] Задание переменной %DiskRoot%




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

Код:

Код: Выделить всё

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

PS

А ответ уже есть.
Аватара пользователя
madmasles

Re: [решено] Задание переменной %DiskRoot%

Сообщение madmasles »

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

Re: [решено] Задание переменной %DiskRoot%

Сообщение CtrlSoft »

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

Re: [решено] Задание переменной %DiskRoot%

Сообщение CtrlSoft »

Цитата CtrlSoft:



скрипт проверял есть ли требуемый язык в системе
[решено] Задание переменной %DiskRoot%




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

Код:

Код: Выделить всё

$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
Аватара пользователя
madmasles

Re: [решено] Задание переменной %DiskRoot%

Сообщение madmasles »

потребовалось запустить команду Run с другими параметрами. При этом нужно указать два разных пути, которые требуется определить наличием файлов на диске.

Т.е. переменная №1 - ищем файл в корень диска

переменная №2 - ищем файл из папки в корень диска (\folder\file.wim)



после определения переменных происходит запуск:

%переменная№1%\folder0\folder1\folder2\setup.exe /installfrom:%переменная№2%\folder0\file.wim /unattend:%переменная№1%\folder0\folder1\folder2\file.xml
Ответить

Вернуться в «AutoIt»