[Quote]

    Guest
  • REPUTATION:0

    [+] [-]
Обновил перевод (метка 210930). Докинул примеров, подправил ошибки, добавил описание внутренних переменных PECMD (=%VAR%.txt). В шапке.

[Quote]

    alexandr987
  • 21889
  • Longevity: 4 years 9 months
  • Posts: 17
  • REPUTATION:0

    [+] [-]
Всем привет) Прошу помощи знатаков, поскольку совсем новичек в этом. Есть основная программа Win3 и ее окно, есть подпрограмма SetEdit4. Как сделать, чтобы сначала запускалась основная программа , а потом автоматически с небольшой задержкой подпрограмма без подавления окна и процесса основной программы.
CALL @Win3
_SUB Win3, \\ основная программа
................
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
call SetEdit4
_END
SetEdit4 \\ подпрограмма
..............
_END
Если запускать от кнопки Button5, то все ОК, запускается основная программа, потом подпрограмма, но нужно нажимать кнопку, а хочется автоматически. Но кнопка тоже нужна, она есть и работает как надо.
Если через call SetEdit4, то сразу запускается подпрограмма, подавляя окно и процесс основной программы.
Пробовал прописывать вверху CALL @SetEdit4 рядом с CALL @Win3, но тогда программа и подпрограмма выполняются поочередно.

[Quote]

    Guest
  • REPUTATION:0

    [+] [-]
alexandr987, во-первых, вызвать окно можно по-разному (в смысле соотношений родительского потока и дочернего окна). Строго говоря, вызов call SetEdit4 не во всех версиях PECMD откроет ОКНО, только не очень новые версии интерпретируют это аналогично правильной команде call @SetEdit4.

вызов окна, определяемого _SUB

CALL @-sub[:@-#LxTyWwHh]] [LeadChar]<WinName> [CMDLineParam] //внешнее подокно
@-sub[:@-#LxTyWwHh]] дополнительные настройки дочернего окна:
@ сохранить отношение родительского и дочернего окна
- есть заголовок
# есть рамки
LxTyWwHh размер дочернего окна, например:L210T150W170H50
LeadChar символы, оределяющие отношение родительского и дочернего окна:
@ вызов окна, определяемого _SUB; для вызова из него другого окна: CALL @
@* вызов дочернего окна _SUB, которое будет работать одновременно с
родительским; следующая команда не выполяется до закрытия дочернего окна
@- вызов окна _SUB в фоновом режиме и продолжение выполнения следующей
команды, но некоторые трудоемкие операции все равно будут заблокированы
@~ вызов окна _SUB в фоновом режиме, без блокирования трудоемких операций
@+ вызов окна _SUB в фоновом режиме, без блокирования трудоемких операций,
дочернее окно независимо и программа не ждёт его закрытия для выхода
@^ напоминает @*, но родительское окно не перекрывается дочерним окнм, что
применимо к родительскому окну, управляемому исключительно событиями
$ Отсутствие указывает на вызывающий подпроцесс, имя которого - параметр;
формат параметров функции: в подпроцессе и окне, %0, %1, %2, ...%n
относятся соответственно к SubProcName/WinName, и параметр N1, N2,...Nn
%# указывает количество параметров
%* указывает все параметры, начиная с %1
%~0, %~1, %~2, ...%~n указывает на удаление обрамляющих двойных кавычек
%@ указывает все параметры, начиная с %0
Т.е., возможно, подойдёт команда call @~SetEdit4
Во-вторых, можно использовать THREAD (THRD):
THRD TEAM WAIT 1000|call @SetEdit4 //эта строчка запустит отдельный поток, в котором через 1000мс запустится независимое окно SetEdit4.

[Quote]

    alexandr987
  • 21889
  • Longevity: 4 years 9 months
  • Posts: 17
  • REPUTATION:0

    [+] [-]
возможно, подойдёт команда call @~SetEdit4
Прекрасно работает, но, увы. После закрытия программы остается висеть не завершенный фоновый процесс и с каждым перезапуском программы число этих процессов накапливается. Если подпрограмму SetEdit4 вызывать кнопкой или CALL SetEdit4, то программа завершается корректно и никаких посторонних процессов не остается.
Пробую второй вариант THRD.
В этом случае секция SetEdit4 запускается и отрабатывает, но не передает данные в основную программу( Завершается работа программы корректно, без лишних роцессов) Вот сама секция
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,TEAM MESS %DEnvi% *2000| EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName
MESS %WIMFILE% *3000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
MESS %WIMFILE% отображает полный путь, но этот путь не подхватывается основной программой, но если по кнопке или через CALL SetEdit4 или call @~SetEdit4, то все ОК)
Может вообще как-то это можно переделать, чтобы сначала был поиск , а потом запуск основного окна программы. Тогда секцию, и как следствие кнопку можно убрать. Если просто CALL SetEdit4, то все работает и завершается как надо, просто на время отработки секции SetEdit4 подавляется основное окно программы. Ну и хрен с ним)
Вот вся программа по которой еще куча вопросов, если можно, конечно)
CALL @Win3
ENVI MNTDIR=
ENVI WIMFILE=
_SUB SetEdit45 // ручной выбор файла, пока без кнопки
ENVI Wimfile=
BROW Wimfile,install.wim,Please select the image source to be applied,wim;esd;swm|*.wim;*.esd;*.swm|All files|*.*|,0x1000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,TEAM MESS %DEnvi% *2000| EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName
MESS %WIMFILE% *3000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB Apply
TEAM ENVI @item2=Выполняется| ENVI @item2.Enable=0
ENVI @Button31.enable=0
ENVI Result=1
FIND $%Edit4%=,TEAM ENVI Result=0|MESS Выберите образ Windows! @Внимание !#OK
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите раздел для установки Windows! @Внимание !#OK
FIND $%Result%=1,EXEC =CMD /C mode con cols=63 lines=10 & Dism /apply-image /imagefile:"%Edit4%" /index:%index2% /ApplyDir:"%List4%" & ping localhost -n 3 > nul
TEAM ENVI @item2=Завершено| ENVI @item2.Enable=0
call @FIX
_END
_SUB Win3,W420H460,Установка Windows из .wim файла,,PECMD.EXE#1
ENVI &::index2=1
ENVI MEMO1=
FDRV AllDrive=
MEMO MEMO1,L7T170W400H190,,,0x8
GROU Group2,L7T6W398H150,Параметры установки,,0xff0000,
LABE Label4,L15T27W110H30,Выберите файл установки
EDIT Edit4,L105T30W202H24,
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
LABE Label5,L15T67W110H30,Выберите диск для установки
LIST List4,L130T70W40H35,%AllDrive%,TEAM envi panfu2=%list4%|envi @item2.enable=1|envi @Button22.enable=1
// ITEM Button30,L230T360W130H24,Управление дисками,mmc.exe /b diskmgmt.msc
LIST LIST1,L130T110W38H200,1,envi index2=%LIST1%,1,
LABE Label6,L15T106W110H26,Индекс редакции Windows
ITEM Button26,L182T67W100H24,Wim инфо,EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" /index:%index2% 2>&1,
ITEM Button22,L295T67W100H24,Формат,CALL FORM,
ITEM ITEM2,L182T100W100H35,Установить,CALL Apply,
ITEM Button31,L295T100W100H35,Загрузчик,CALL FIX,
GROU Group3,L7T360W398H60,Информация,,0xff0000,
LIST LAN,L210T382W55H100,RUS,,RUS,0x4
LIST LUN,L335T382W55H100,BIOS,,BIOS,0x4
LABE LABE1,L168T387W35H17,Язык,,
LABE LABE4,L300T387W35H17,Тип,,
RADI RADI1,L20T385W132H18,,call fund,1,
// ENVI ?disme=FVER,%CurDir%\dism.exe
ENVI ?disme=FVER,%WinDir%\System32\dism.exe
envi @RADI1=Dism %disme%
RSTR disme1=5,%disme%
LSTR disme2=3,%disme%
envi disme=%disme2%%disme1%
envi @item2.enable=0
envi @Button31.enable=0
envi @Button22.enable=0
THRD TEAM WAIT 1000|call @SetEdit4
_END
// Format ==============================================================================
_SUB FORM
ENVI Result=1
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите диск для установки Windows @Внимание !#OK
MESS Диск %List4% будет отформатирован @Внимание !#YN $N
FIND $%YESNO%=NO,CALL FORM2
TEAM ENVI @Button22=Выполняется| ENVI @Button22.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Format %LIST4% /FS:NTFS /Q /V:System /Y
WAIT 1500
TEAM ENVI @Button22=Завершено
WAIT 3000
TEAM ENVI @Button22=Формат| ENVI @Button22.Enable=1
_END
_SUB FORM2
TEAM MESS Правильно! Нафик оно надо) # *3000| WAIT 1000| KILL \
EXIT
_END
// Bcdboot =============================================================================
_SUB FIX
WAIT 1500
TEAM ENVI @Button31=Выполняется| ENVI @Button31.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!bcdboot.exe %LIST4%\Windows /s %LIST4% /f BIOS /l ru-ru
WAIT 1500
TEAM ENVI @Button31=Завершено| ENVI @Button31.Enable=0
WAIT 6000
TEAM ENVI @Button31=Загрузчик| ENVI @Button31.Enable=1
TEAM ENVI @item2=Установить| ENVI @item2.Enable=1
_END
_SUB llj //MEMO
ENVI @LABE3=%~1
find $%radi1.check%=1,
{
FIND $X=X%~1, TEAM envi @item2.enable=0| envi @item4.enable=0! TEAM EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%~1" 2>&1 | envi @item4.enable=1
read -,-1,&&pos,%MEMO1%
calc #&&ipos = (%&pos% - 7)/5
envi &&i=1
envi &&j=
loop %&i%<=%&ipos%,
{
envi &j=%&j%%&i%|
CALC &i= %&i% + 1
}
TEAM envi @list1.VAL=%&j%| envi @list1.SEL=1
}
_END

[Quote]

    Guest
  • REPUTATION:0

    [+] [-]
alexandr987, так SetEdit4 - это обычная подпрограмма, а не окно? Тогда что мешает вначале вызвать её, а тогда открыть окно
call SetEdit4
CALL @Win3
_SUB Win3, \\ основная программа
................
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
_END
Если хочется, чтобы основное окно открывалось БЕЗ ожидания отработки подпрограммы, тогда
THRD call SetEdit4
CALL @Win3
...
Но во этом случае не забываем, что открытое окно Win3 использует переменные НА МОМЕНТ СВОЕГО ЗАПУСКА, и, чтобы их изменить, нужно использовать не ENVI XXX=%YYY%, а ENVI @XXX=%YYY%
В частности, в приведённом примере нужно так писать:
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,TEAM ENVI @WIMFILE=%WIMFILE%|CALL PthName
Тогда переменная WIMFILE станет глобальной для всего скрипта, а не только для конкретной подпрограммы (или даже одной команды - в случае с FORX).

[Quote]

    alexandr987
  • 21889
  • Longevity: 4 years 9 months
  • Posts: 17
  • REPUTATION:0

    [+] [-]
SetEdit4 - это обычная подпрограмма, а не окно?
Это поиск *.wim файла, здесь нет никаких окон, кроме отладочных MESS, которые позже, скорее всего, будут удалены.
Тогда что мешает вначале вызвать её, а тогда открыть окно
Я именно так и планировал, руководствуясь вашими пояснениями "Скрипт 78RePack - как смог, так и описал.", но это не заработало, потому начал городить по своему, не сильно разбираясь в вопросе. Буду разбираться)
Если хочется, чтобы основное окно открывалось БЕЗ ожидания отработки подпрограммы, тогда
THRD call SetEdit4
CALL @Win3
Это я пробовал, но путь не заполняется в окошко.
Замена строки
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName на
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,TEAM ENVI @WIMFILE=%WIMFILE%|CALL PthName не помогает
Вся секция выглядет так
THRD TEAM WAIT 1000|call SetEdit4
CALL @Win3
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,TEAM MESS %DEnvi% *2000| EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,ENVI @WIMFILE=%WIMFILE%
MESS %WIMFILE% *3000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
Неа, путь не перехватывается, хотя MESS %WIMFILE% показывает правильный полный путь. Но далее он не "подхватывается" программой
Возможно ENVI @WIMFILE=%WIMFILE% не срабатывает из-за ошибки в строке.
открытое окно Win3 использует переменные НА МОМЕНТ СВОЕГО ЗАПУСКА
Вот именно, окно Win3 открывается до запуска поиска SetEdit4, потому и остается путым. Видимо, нужно сначала запускать поиск SetEdit4, и только потом открывать основное окно @Win3. Ну, или перезапускать Win3 после окончания поиска SetEdit4, но тогда, скорее всего оно откроется в новом процессе и будет два окна )))
Проверил, что переменная WIMFILE все таки подхватывается (команда отрабатывается с правильными путями), а проблема может быть в
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%, вот @Edit4, которая нужна для работы основного окна, пустая. Потому и строка не отображает путь
EDIT Edit4,L105T30W202H24, в Edit4 пусто, нечего отображать. А просто нельзя использовать %WIMFILE%, зачем нужна эта Edit4 ? ))) Сами команды обходятся без Edit4 и прекрасно работают с %WIMFILE% ) Быть может Edit4 нужна только для отображения в EDIT ?
Полный код программы
CALL @Win3
ENVI MNTDIR=
ENVI WIMFILE=
_SUB SetEdit45
ENVI Wimfile=
BROW Wimfile,install.wim,Please select the image source to be applied,wim;esd;swm|*.wim;*.esd;*.swm|All files|*.*|,0x1000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,TEAM MESS %DEnvi% *2000| EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName
MESS %WIMFILE% *3000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB Apply
TEAM ENVI @item2=Выполняется| ENVI @item2.Enable=0
ENVI @Button31.enable=0
ENVI Result=1
FIND $%Edit4%=,TEAM ENVI Result=0|MESS Выберите образ Windows! @Внимание !#OK
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите раздел для установки Windows! @Внимание !#OK
FIND $%Result%=1,EXEC =CMD /C mode con cols=63 lines=10 & Dism /apply-image /imagefile:"%Edit4%" /index:%index2% /ApplyDir:"%List4%" & ping localhost -n 3 > nul
TEAM ENVI @item2=Завершено| ENVI @item2.Enable=0
call @FIX
_END
_SUB Win3,W420H460,Установка Windows из .wim файла,,PECMD.EXE#1
ENVI &::index2=1
ENVI MEMO1=
FDRV AllDrive=
MEMO MEMO1,L7T170W400H190,,,0x8
GROU Group2,L7T6W398H150,Параметры установки,,0xff0000,
LABE Label4,L15T27W110H30,Выберите файл установки
EDIT Edit4,L105T30W202H24,
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
LABE Label5,L15T67W110H30,Выберите диск для установки
LIST List4,L130T70W40H35,%AllDrive%,TEAM envi panfu2=%list4%|envi @item2.enable=1|envi @Button22.enable=1
// ITEM Button30,L230T360W130H24,Управление дисками,mmc.exe /b diskmgmt.msc
LIST LIST1,L130T110W38H200,1,envi index2=%LIST1%,1,
LABE Label6,L15T106W110H26,Индекс редакции Windows
ITEM Button26,L182T67W100H24,Wim инфо,EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" /index:%index2% 2>&1,
ITEM Button22,L295T67W100H24,Формат,CALL FORM,
ITEM ITEM2,L182T100W100H35,Установить,CALL Apply,
ITEM Button31,L295T100W100H35,Загрузчик,CALL FIX,
GROU Group3,L7T360W398H60,Информация,,0xff0000,
LIST LAN,L210T382W55H100,RUS,,RUS,0x4
LIST LUN,L335T382W55H100,BIOS,,BIOS,0x4
LABE LABE1,L168T387W35H17,Язык,,
LABE LABE4,L300T387W35H17,Тип,,
RADI RADI1,L20T385W132H18,,call fund,1,
// ENVI ?disme=FVER,%CurDir%\dism.exe
ENVI ?disme=FVER,%WinDir%\System32\dism.exe
envi @RADI1=Dism %disme%
RSTR disme1=5,%disme%
LSTR disme2=3,%disme%
envi disme=%disme2%%disme1%
envi @item2.enable=0
envi @Button31.enable=0
envi @Button22.enable=0
_END
// Format ==============================================================================
_SUB FORM
ENVI Result=1
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите диск для установки Windows @Внимание !#OK
MESS Диск %List4% будет отформатирован @Внимание !#YN $N
FIND $%YESNO%=NO,CALL FORM2
TEAM ENVI @Button22=Выполняется| ENVI @Button22.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Format %LIST4% /FS:NTFS /Q /V:System /Y
WAIT 1500
TEAM ENVI @Button22=Завершено
WAIT 3000
TEAM ENVI @Button22=Формат| ENVI @Button22.Enable=1
_END
_SUB FORM2
TEAM MESS Правильно! Нафик оно надо) # *3000| WAIT 1000| KILL \
EXIT
_END
// Bcdboot =============================================================================
_SUB FIX
WAIT 1500
TEAM ENVI @Button31=Выполняется| ENVI @Button31.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!bcdboot.exe %LIST4%\Windows /s %LIST4% /f BIOS /l ru-ru
WAIT 1500
TEAM ENVI @Button31=Завершено| ENVI @Button31.Enable=0
WAIT 6000
TEAM ENVI @Button31=Загрузчик| ENVI @Button31.Enable=1
TEAM ENVI @item2=Установить| ENVI @item2.Enable=1
_END
_SUB llj //MEMO
ENVI @LABE3=%~1
find $%radi1.check%=1,
{
FIND $X=X%~1, TEAM envi @item2.enable=0| envi @item4.enable=0! TEAM EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%~1" 2>&1 | envi @item4.enable=1
read -,-1,&&pos,%MEMO1%
calc #&&ipos = (%&pos% - 7)/5
envi &&i=1
envi &&j=
loop %&i%<=%&ipos%,
{
envi &j=%&j%%&i%|
CALC &i= %&i% + 1
}
TEAM envi @list1.VAL=%&j%| envi @list1.SEL=1
}
_END


Last edited by alexandr987 on 2021-10-25 01:15; edited 3 times in total

[Quote]

    Guest
  • REPUTATION:0

    [+] [-]

SetEdit4 можно сильно упростить

call SetEdit4
CALL @Win3
ENVI MNTDIR=
ENVI WIMFILE=
_SUB SetEdit45 // ручной выбор файла, пока без кнопки
ENVI Wimfile=
BROW Wimfile,install.wim,Please select the image source to be applied,wim;esd;swm|*.wim;*.esd;*.swm|All files|*.*|,0x1000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB SetEdit4
FORX \ISO\*.wim,WIMFILE,1,TEAM ENVI Edit4=%WIMFILE%
FDIR ypath=%Edit4%
call llj "%WIMFILE%"
_END
_SUB Apply
TEAM ENVI @item2=Выполняется| ENVI @item2.Enable=0
ENVI @Button31.enable=0
ENVI Result=1
FIND $%Edit4%=,TEAM ENVI Result=0|MESS Выберите образ Windows! @Внимание !#OK
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите раздел для установки Windows! @Внимание !#OK
FIND $%Result%=1,EXEC =CMD /C mode con cols=63 lines=10 & Dism /apply-image /imagefile:"%Edit4%" /index:%index2% /ApplyDir:"%List4%" & ping localhost -n 3 > nul
TEAM ENVI @item2=Завершено| ENVI @item2.Enable=0
call @FIX
_END
_SUB Win3,W420H460,Установка Windows из .wim файла,,PECMD.EXE#1
ENVI &::index2=1
ENVI MEMO1=
FDRV AllDrive=
MEMO MEMO1,L7T170W400H190,,,0x8
GROU Group2,L7T6W398H150,Параметры установки,,0xff0000,
LABE Label4,L15T27W110H30,Выберите файл установки
EDIT Edit4,L105T30W202H24,%Edit4%
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
LABE Label5,L15T67W110H30,Выберите диск для установки
LIST List4,L130T70W40H35,%AllDrive%,TEAM envi panfu2=%list4%|envi @item2.enable=1|envi @Button22.enable=1
// ITEM Button30,L230T360W130H24,Управление дисками,mmc.exe /b diskmgmt.msc
LIST LIST1,L130T110W38H200,1,envi index2=%LIST1%,1,
LABE Label6,L15T106W110H26,Индекс редакции Windows
ITEM Button26,L182T67W100H24,Wim инфо,EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" /index:%index2% 2>&1,
ITEM Button22,L295T67W100H24,Формат,CALL FORM,
ITEM ITEM2,L182T100W100H35,Установить,CALL Apply,
ITEM Button31,L295T100W100H35,Загрузчик,CALL FIX,
GROU Group3,L7T360W398H60,Информация,,0xff0000,
LIST LAN,L210T382W55H100,RUS,,RUS,0x4
LIST LUN,L335T382W55H100,BIOS,,BIOS,0x4
LABE LABE1,L168T387W35H17,Язык,,
LABE LABE4,L300T387W35H17,Тип,,
RADI RADI1,L20T385W132H18,,call fund,1,
// ENVI ?disme=FVER,%CurDir%\dism.exe
ENVI ?disme=FVER,%WinDir%\System32\dism.exe
envi @RADI1=Dism %disme%
RSTR disme1=5,%disme%
LSTR disme2=3,%disme%
envi disme=%disme2%%disme1%
envi @item2.enable=0
envi @Button31.enable=0
envi @Button22.enable=0
_END
// Format ==============================================================================
_SUB FORM
ENVI Result=1
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите диск для установки Windows @Внимание !#OK
MESS Диск %List4% будет отформатирован @Внимание !#YN $N
FIND $%YESNO%=NO,CALL FORM2
TEAM ENVI @Button22=Выполняется| ENVI @Button22.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Format %LIST4% /FS:NTFS /Q /V:System /Y
WAIT 1500
TEAM ENVI @Button22=Завершено
WAIT 3000
TEAM ENVI @Button22=Формат| ENVI @Button22.Enable=1
_END
_SUB FORM2
TEAM MESS Правильно! Нафик оно надо) # *3000| WAIT 1000| KILL \
EXIT
_END
// Bcdboot =============================================================================
_SUB FIX
WAIT 1500
TEAM ENVI @Button31=Выполняется| ENVI @Button31.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!bcdboot.exe %LIST4%\Windows /s %LIST4% /f BIOS /l ru-ru
WAIT 1500
TEAM ENVI @Button31=Завершено| ENVI @Button31.Enable=0
WAIT 6000
TEAM ENVI @Button31=Загрузчик| ENVI @Button31.Enable=1
TEAM ENVI @item2=Установить| ENVI @item2.Enable=1
_END
_SUB llj //MEMO
ENVI @LABE3=%~1
find $%radi1.check%=1,
{
FIND $X=X%~1, TEAM envi @item2.enable=0| envi @item4.enable=0! TEAM EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%~1" 2>&1 | envi @item4.enable=1
read -,-1,&&pos,%MEMO1%
calc #&&ipos = (%&pos% - 7)/5
envi &&i=1
envi &&j=
loop %&i%<=%&ipos%,
{
envi &j=%&j%%&i%|
CALC &i= %&i% + 1
}
TEAM envi @list1.VAL=%&j%| envi @list1.SEL=1
}
_END

[Quote]

    alexandr987
  • 21889
  • Longevity: 4 years 9 months
  • Posts: 17
  • REPUTATION:0

    [+] [-]
SetEdit4 можно сильно упростить
Спасибо вам большое, буду разбираться ) Так понял, Вы убрали поиск "правильных" дисков, пусть будет так )))
Методом тыка сработало
EDIT Edit4,L105T30W202H24,%WIMFILE%,ENVI @Label1=%Edit1%
Строка отображает полный путь по %WIMFILE% и никакой Edit4 не нужен. Попробую вообще избавиться от Edit4 в программе и использовать только %WIMFILE%. Посмотрите строку выше, может что лишнее или не правильно ? Похоже ENVI @Label1=%Edit1% вообще не нужно)


Last edited by alexandr987 on 2021-10-25 01:04; edited 3 times in total

[Quote]

    Guest
  • REPUTATION:0

    [+] [-]
alexandr987, мой вам совет: начинайте с простых вещей, минимум для обкатки. А потом усложнение. А не наоборот, накидать максимум того, что непонятно, и разбираться с этим.

[Quote]

    dimo70
  • 17296
  • Longevity: 6 years 7 months
  • Posts: 3705
  • REPUTATION:26

    [+] [-]
  • Location: BG
conty9, привет. Очень понравилась твоя утилита для WinPE Подержка Ext2 и AppleHFS, которая позволяет видеть и редактировать линукс и мак разделов. Я переделал для нормального Windows-а и заработала, но не знаю как выключить. Поможешь? aa

_________________
Signed off for violation of forum rules

[Quote]

    Guest
  • REPUTATION:0

    [+] [-]
dimo70, ну, это вовсе не утилита, просто скрипт подключения драйверов. Чтобы "выключить", нужно в реестре

удалить службы AppleHFS и ext2fsd

Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AppleHFS]
[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ext2fsd]
Или при помощи PECMD:
TEAM SERV-delete AppleHFS|SERV-delete ext2fsd
После перезагрузки поддержка исчезнет. Если больше не нужно, и сами драйверы можно удалить.
Если же периодически нужно, можно изменить значение Start для соответствующего драйвера (Start=4 - отключить драйвер).

[Quote]

    dimo70
  • 17296
  • Longevity: 6 years 7 months
  • Posts: 3705
  • REPUTATION:26

    [+] [-]
  • Location: BG
conty9, спасибо. Попробую сделать и потом выложу. az

_________________
Signed off for violation of forum rules

[Quote]

    avalat
  • 222
  • Longevity: 9 years 5 months
  • Posts: 428
  • REPUTATION:127

    [+] [-]
Просьба модераторам - перекинуть посты выше в тему "PECMD Вопросы??? "
при чём тут перевод...

[Quote]

    alexandr987
  • 21889
  • Longevity: 4 years 9 months
  • Posts: 17
  • REPUTATION:0

    [+] [-]
начинайте с простых вещей
Вот и упрощаю) Поубирал ненужные (в моем понимании) взаимодублирующие переменные, упростил некоторые секции.
Код программы
CALL SetEdit4
CALL @Win3
ENVI MNTDIR=
ENVI WIMFILE=
_SUB SetEdit45
ENVI Wimfile=
BROW Wimfile,install.wim,Please select the image source to be applied,wim;esd;swm|*.wim;*.esd;*.swm|All files|*.*|,0x1000
FIND $%WIMFILE%=,!ENVI @Edit4=%WIMFILE%
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB SetEdit4
TEAM FDRV NEnvi=*:|ENVI AllDrv=
FORX * %NEnvi%,DEnvi,
{* FDRV *vol ,TEnvi=%DEnvi%
FIND $%TEnvi%=,EXIT -!ENVI AllDrv=%AllDrv% %DEnvi%
}
MESS %AllDrv% *2000
FORX * %AllDrv%,DEnvi,IFEX %DEnvi%\ISO\*.wim,EXIT
FORX %DEnvi%\ISO\*.wim,WIMFILE,0,CALL PthName
MESS %WIMFILE% *2000
FDIR ypath=%WIMFILE%
call llj "%WIMFILE%"
_END
_SUB Apply
TEAM ENVI @item2=Выполняется| ENVI @item2.Enable=0
ENVI @Button31.enable=0
ENVI Result=1
FIND $%WIMFILE%=,TEAM ENVI Result=0|MESS Выберите образ Windows! @Внимание !#OK
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите раздел для установки Windows! @Внимание !#OK
FIND $%Result%=1,EXEC =CMD /C mode con cols=63 lines=10 & Dism /apply-image /imagefile:"%WIMFILE%" /index:%LIST1% /ApplyDir:"%List4%" & ping localhost -n 3 > nul
TEAM ENVI @item2=Завершено| ENVI @item2.Enable=0
call @FIX
_END
_SUB Win3,W420H460,Установка Windows из .wim файла,,PECMD.EXE#1
ENVI &::index2=1
ENVI MEMO1=
FDRV AllDrive=
MEMO MEMO1,L7T170W400H190,,,0x8
GROU Group2,L7T6W398H150,Параметры установки,,0xff0000,
LABE Label4,L15T27W110H30,Выберите файл установки
EDIT Edit4,L105T30W202H24,%WIMFILE%,
ITEM Button5,L320T30W75H24,Browse,CALL SetEdit4
LABE Label5,L15T67W110H30,Выберите диск для установки
LIST List4,L130T70W40H35,%AllDrive%,TEAM envi panfu2=%list4%|envi @item2.enable=1|envi @Button22.enable=1
// ITEM Button30,L230T360W130H24,Управление дисками,mmc.exe /b diskmgmt.msc
LIST LIST1,L130T110W38H200,1|2|,,1,0x4
LABE Label6,L15T106W110H26,Индекс редакции Windows
ITEM Button26,L182T67W100H24,Wim инфо,TEAM EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" /index:%LIST1% 2>&1| ENVI @Button26=Wim инфо %LIST1%
ITEM Button22,L295T67W100H24,Формат,CALL FORM,
ITEM ITEM2,L182T100W100H35,Установить,CALL Apply,
ITEM Button31,L295T100W100H35,Загрузчик,CALL FIX,
GROU Group3,L7T360W398H60,Информация,,0xff0000,
LIST LAN,L210T382W55H100,RUS,,RUS,0x4
LIST LUN,L335T382W55H100,BIOS,,BIOS,0x4
LABE LABE1,L168T387W35H17,Язык,,
LABE LABE4,L300T387W35H17,Тип,,
RADI RADI1,L20T385W132H18,,call fund,1,
// ENVI ?disme=FVER,%CurDir%\dism.exe
ENVI ?disme=FVER,%WinDir%\System32\dism.exe
envi @RADI1=Dism %disme%
RSTR disme1=5,%disme%
LSTR disme2=3,%disme%
envi disme=%disme2%%disme1%
envi @item2.enable=0
envi @Button31.enable=0
envi @Button22.enable=0
call llj
_END
// Format ==============================================================================
_SUB FORM
ENVI Result=1
FIND $%List4%=,TEAM ENVI Result=0|MESS Выберите диск для установки Windows @Внимание !#OK
MESS Диск %List4% будет отформатирован @Внимание !#YN $N
FIND $%YESNO%=NO,CALL FORM2
TEAM ENVI @Button22=Выполняется| ENVI @Button22.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Format %LIST4% /FS:NTFS /Q /V:System /Y
WAIT 1500
TEAM ENVI @Button22=Завершено
WAIT 3000
TEAM ENVI @Button22=Формат| ENVI @Button22.Enable=1
_END
_SUB FORM2
TEAM MESS Правильно! Нафик оно надо) # *3000| WAIT 1000| KILL \
EXIT
_END
// Bcdboot =============================================================================
_SUB FIX
WAIT 1500
TEAM ENVI @Button31=Выполняется| ENVI @Button31.Enable=0
WAIT 1500
EXEC* -code:866 -err+ @MEMO1=!bcdboot.exe %LIST4%\Windows /s %LIST4% /f BIOS /l ru-ru
WAIT 1500
TEAM ENVI @Button31=Завершено| ENVI @Button31.Enable=0
WAIT 6000
TEAM ENVI @Button31=Загрузчик| ENVI @Button31.Enable=1
TEAM ENVI @item2=Установить| ENVI @item2.Enable=1
_END
_SUB llj
EXEC* -code:866 -err+ @MEMO1=!cmd.exe /c Dism /get-wiminfo /wimFile:"%WIMFILE%" 2>&1
_END


Last edited by alexandr987 on 2021-10-30 09:53; edited 1 time in total

[Quote]

    avalat
  • 222
  • Longevity: 9 years 5 months
  • Posts: 428
  • REPUTATION:127

    [+] [-]
alexandr987, Почему не читаешь "Личное сообщение" ?? (вверху, рядом с профилем)

Page 26 of 28


Display posts:    

Current time is: 17-Jul 23:41

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum