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

    korsak7
  • 107
  • Стаж: 2 года 8 месяцев
  • Сообщений: 493
  • Репутация:38

    [+] [-]
Господа конструкторы и сочувствующие!
Как вы знаете (а если не знаете, то много потеряли - например в сборке 2k10 автозагрузка и управление WinPE сделано именно на этой программе), существует замечательная программа PECMD китайского сотоварища.

Краткий обзор

Welcome PECMD2012 - WinPE Commander, func WinPE command interpreter powerful tool!
PECMD - XCMD V2.2 complement version, based on the increase in XCMD V2.2 of CALL, HOTK, FBWF and other commands, to express my gratitude to Yonsm etc!
PECMD2012 Official Website: http: //mdyblog.blog.163.com/blog/static/106150119201202591855298/
PECMD2012 NonCopyRight, any individuals and organizations (including business organizations) can easily free to use, free to modify, .... Technical support may consult Author
PECMD2012 PECMD2.4 reference source, re-designed. Help document finishing typesetting --988 668 @ May 10, 2012 (appendix!)
──vers───────────────────────────────────────────────────
☆PECMD v2012.1.79.59 fix10 X86U (J2D3)
──Feat───────────────────────────────────────────────────
★ dapper, run fast; conventional extended support setting commands; built-in multiple commands, func extremely powerful; support call external EXE and DLL function;
★ Support frmt unified command line para and configuration files, log operate entirely using INI file configuration, modify INI able to fully control the login procedure;
★ support modular, structured and scripted configuration files; profile support line after line comments and notes, as well as support spaces indented.
──use───────────────────────────────────────────────────
◎ using the command line para, for example: To set the environment variable, perform "PECMD.EXE ENVI $ PPPoE = OK" can be.
◎ using the configuration file, for example: "PECMD.EXE LOAD% SystemRoot% \ PECMD.INI".
◎ without command line para, direct the implementation of this program will display this help; for more information about the description of the problem, see "HELP" command para.
◎ para command parsing support environment variables (eg "% TEMP% \ X.TXT"); command is not case-sensitive; angle brackets "<>" para representation must be entered within the square
brackets "[]" within can be omitted.
◎ command-line mode is disabled by default comment (not LOAD execution); script mode is enabled by default comment (LOAD execution) can be used to switch NOTE or COME.
◎ Normally, you only need to edit a configuration file to a location on the disk PECMD.INI, which lists the commands to be executed. Then
perform "PECMD.EXE MAIN INI file name (including the path, supportive environment variable)" to the WinPE boot time.
◎ script files frmt support WCE, WCI, WCS, WCX, INI, INF, TXT, LOG, etc., and any self-appointed frmt, in order to standardize, PE of LOAD
configuration file with the INI, the driver installation with INF, while the script is used WCE, WCI, WCS, WCX; individual tests suggested WCI WCX or file
former name with a custom comment character; and compression general use WCZ, WCM, WZM other logs using LOG (default), built-in help text
encoded using TXT-ANSI. Custom scripts frmt custom scripts must ensure compliance with system-defined text frmt script specification standard, or else be wrong!
▲ Note: LOAD command if the actual path, the path contains a space in it, '"quotes must not be omitted because LOAD can take para. Such as:
LOAD "X: \ Program Files \ a.ini"; and if it is a variable reference and on the surface appears to be continuous, without quotes, such as:
LOAD% Program% \ a.ini // quotation marks omitted; see LOADrem.
▲ test this script commands in the command line PECMDEDIT or PECMD; do CMD command line.
▲ command word subject: AZ az 0-9 _ characters. The "$ # @ + - | ^ &" suffix are all start flag. FIND-JPG and THREAD * FIND-JPG
The syntax is illegal, but you can use CALL FIND-JPG and complete manner THREAD * CALL FIND-JPG's.
▲ EXEC * 1 command ... NAME = command line receive information immediately terminate execution
▲ try to use less variable PE environment variables, so that you can continue to use the functions in a multithreaded environment. & CurDir ... & ERRORLEVEL user variables.
△ when executing a command in the CMD window or PECMD WinGUI program, with a pair of the percent "% Desktop%" to use the built-in environment variables PECMD.
△ PECMD execute command in the CMD batch file, use a double for the percent sign "%% Desktop %%" PECMD use the built-in environment variables.
△ If you use the command line, and the para with the ">" or "|" or "&" or "^", the para command must be surrounded by quotation marks, otherwise it will be considered
is to redirect or pipe operator and so on. Or in front of these characters plus a "^." The program supports quotes para resolution.
◎ Note: The lower the value of the local variables can be referenced directly superior local variables, but not recommended for a global variable, because it is easy to cause the logical structure of confusion!
◇ indicate% instead of variables %% identity; built-in random number variable% RANDOM%;% PECMDVER%; real-time in the current directory:% _ CD%; current PID:% & __ PID%
◇ path variable Syntax Standard: drive: \% path variable% \% variable% path, the command does not automatically add ":" and "\", please note!
◇ Command Syntax Standard 1: ABCD [partition], [drive letter], [waiting time] // para empty can not ignore the comma between para!
◇ Command Syntax Standard 2: ABCD [partition] [, drive letter] [waiting time] // para empty reverse can also be ignored para comma before!
☆ except in special circumstances, please do not nest with a single line command statement as written, you should use the standard wording branches, so easy to read and understand.
▲ PECMD.exe exit code of the last command error code. 0 for error. Negative (or> 0x7FFFFFFF) was one.
▲ finishing top of the letter of the command to put PECMD.INI.
Соответственно и описание команд у нее на родном языке автора , то бишь на китайском.
conty9 и я предлагаем всем заинтересованным в этой программулине замутить краудфандинг, или короче говоря дружною толпою перевести хелп на английский (в перспективе можно и на русский)
1. Отсюда http://yadi.sk/d/hRChOI_edq4cF тащите файл help_2_command.txt (кодировка UTF-8)
2. Открываете его в редакторе (я делал в Akelpad), любуетесь иероглифами и решаете, какие команды будете переводить. Структура файла довольна наглядна и сразу видно, что относится к конкретной команде, вот подразделы:
frmt - формат команды
func - функция (что делает команда)
para - параметры
exmp - пример
rem - примечание
3. Делаете в этой теме пост "я беру _END-FORM" (например). Минимум не ограничен, но обязательно начиная свой диапазон сразу после предыдущего пользователя
4. Далее идете в https://translate.google.com , ставите направление перевода - китайский->английский. Работа чисто механическая, результат осмыслять необязательно

command

Format:
frmt
Function:
func
Parameters:
para
Example:
exmp
Remarks :
rem
Вот пример результата. Если сможете сделать описание функции в шапке спойлера, то делайте:

_SUB - определяет подпрограмму или окно

Format: _SUB <sub-process name> or _SUB <window name>, <window shape>, [window title], [window event], [window icon], [window type]
Function: define a sub-process or define a window.
Parameters:
■ Sub-procedure name: character string
■ Window name: character string. Window name should be unique and can not be same as other control names or environment variable names.
■ Window title: text
■ Window shape: window position and size. The format is <LTWH>, in which L stands for Left, T for Top, W for Width, H for Hight. And all of them are numerical values. Besides, if the Left and Top are omitted, the window will be centered.
■ Window event: The command is executed when closing the window. And it must be a command supported by PECMD.EXE.
■ Window icon: icons in the window title bar and taskbar. Its format is < icon file name # ID>
■ Window type: [ - ] [ # ] [ value ]. ” – ” stands for no title bar, “# ” for the chromeless window, and value for transparency. Moreover, value higher than 99 is hidden window.
Example:
◆ _SUB DoLoop
◆_SUB Windows1, W360H440, PECMD function demonstration, EXEC $instructions, TXT,%IconFile%#19,20
Remarks :
※ The first character of sub-process name or window name can not be a “$”. And there must be a space between the command keyword _SUB and the sub-process name or window name.
※ If there are multiple _SUB commands, names used for defining the commands can not be repeated and approximated. These names can not be set as environment variables.
※ This command must come in pair with _END command. And both of them can not be used in the command line. For other information, please refer to the illustration of _END command and CALL command.
※ To set the window title, you can use the “ENVI @window name=window title”. Please make reference to the explanation of ENVI command.
5. Потом публикуете спойлеры в своем посте, а в итоге они будут собираться в шапку


Последний раз редактировалось: korsak7 (2015-01-07 19:09), всего редактировалось 4 раз(а)

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

    Гость
  • Стаж: 47 лет
  • Репутация:

    [+] [-]
Conty9 сегодня мне о ней рассказывал, пока ничего не пробывал,
но перспектива работать с китайским интерфейсом не очень радует.
Чем PECMD лучше других языков программирования, например PureBasic
Тоже почти как бейсик.
Или я не прав?

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

    korsak7
  • 107
  • Стаж: 2 года 8 месяцев
  • Сообщений: 493
  • Репутация:38

    [+] [-]
Joker-2013, фейса там как такового нет - какой нарисуешь, на таком и будет
PECMD заточен по другому, не "Hello World" кодировать :)
PECMD - WinPE Commander command interpreter, то есть используется вместо батников. То что он делает одной строкой - ты BAT-файлы замучаешься писать - и это я про старую версию (в 2k10) говорю. А эта версия вообще монстр
Язык платный и предоставляются 2 версии: PureBasic Demo и PureBasic Full. PureBasic Demo имеет некоторые ограничения: Нельзя скомпилировать код в котором больше 800 строк кода. Нельзя скомпилировать динамическую библиотеку. Нельзя использовать API операционных систем.
И неизвестно как он будет работать под PE

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

    conty9
  • 100
  • Стаж: 2 года 8 месяцев
  • Сообщений: 913
  • Репутация:66

    [+] [-]

PECMD - общие принципы работы и ограничения

PECMD - интерпретатор команд (аналог cmd.exe, да и базируется он на том же cmd). Готовый скрипт (принято использовать расширение ini, хотя явных ограничений по расширению нет) запускается так: Pecmd.exe LOAD MyScript.ini (в версии 2012 можно даже так: Pecmd.exe MyScript.ini). Кроме команды LOAD, можно загрузить скрипт командой MAIN - этот режим нужно использовать только под WinPE (когда PECMD используется в качестве оболочки, по окончанию работы скрипта, запущенного через MAIN, выход из PECMD не производится). Готовый скрипт можно интегрировать в PECMD и использовать результат как обычную exe-шку.
Символы комментирования, которые можно использовать в скриптах: "//" или "`". Все, что находится после этих символов, игнорируется интерпретатором (до конца строки). Можно использовать для комментариев: как в начале строки, так и после команд(ы).
Если запустить PECMD без параметров, запустится окно программы со справкой (увы, на китайском... хорошо хоть в Unicode).
Команды нечуствительны к регистру букв, т.е LOAD или load будет исполнятся одинаково.
<параметры, заключенные в эти символы> - обязательны (кроме случаев, когда имеется значение по-умолчанию - тогда параметр можно упустить)
[то, что находится в этих скобках] - необязательные параметры (реализация дополнительного функционала), могут быть упущены
Имена файлов или пути можно использовать без "" - даже при наличии в них пробелов или нелатинских букв они обрабатываются правильно. Т.е., можно указать путь так: "C:\Моя папка\мой файл.txt", а можно и просто C:\Моя папка\мой файл.txt
Скрипты должны быть в кодировке TXT-ANSI, русские буквы поддерживаются (после замены вызываемого в программе шрифта на русский, иначе отображаются растянуто).
Запускать можно не только готовые скрипты, но и отдельные команды. Например: PECMD MESS Недостаточно физической памяти \n подключить файл подкачки @ Подключить файл подкачки #YN * 10000 $ N
Можно использовать стандартные системные переменные, например, %Desktop% или %Windir%
Если нужно запустить из-под PECMD обычный CMD-файл с использованием в качестве ключей переменных, их нужно указывать в двойных %%, т.е, %%Desktop%% или %%Windir%%. Если при запуске CMD-файла или командной строки нужно использовать символы >, |, &, ^,- то их нужно заключать в кавычки: ">", "|", "&", "^".
В программе доступны внутренние переменные: %_CD% - текущий каталог, %PECMDVER% - версия программы, %RANDOM% - случайное число
После выхода из программы в %ErrorLevel% хранится код ошибки последней команды, или "0" - если выход без ошибки.
Некоторые из команд (например, TIPS - всплывающее сообщение в трее) выполняются только до момента завершения работы интерпретатора. Например, мы задали время отображения информации в трее 10сек., но через 3сек. произошел выход из PECMD. Тогда и сообщение будет погашено через 3сек. Т.е., такие моменты нужно учитывать.
Ограничения: поскольку в командах PECMD в качестве разделителя используются некоторые символы (например, обычная запятая ","), то при использовании этих же символов в теле переменных нужно быть аккуратными, иначе "," в переменной может оказаться разделителем нашей команды - и, соответственно, она будет работать неправильно.
Начну, пожалуй, с самой затребованной при создании скриптов или отладке команды MESS

MESS - вывод сообщения в отдельном окне

Format: MESS [Текст в окне] [@Название окна] [#Кнопка окна] [*Время автозакрытия (в миллисекундах)] [$выбор по-умолчанию]
Function: Отобразить запрос с кнопками подтверждения/отмены в отдельном окне
Parameters:
■ Текст в окне может быть мультистроковым, для разделения строк используется "\n". Можно использовать переменные (%rat%).
■ Название окна - одна строчка. Можно использовать переменные (%rat%).
■ Кнопка окна. Поддерживаются варианты: "YN" (Да/Нет), "OK" (ОК), "YNC" (Да/Нет/Отмена), "OKC" (ОК/Отмена), "RETRY" (Повторить), "ABORT" (Прервать). По-умолчанию (если не указано) установлено OK (подтверждение). Результат нажатия можно получить в переменной $%YESNO% (YES, NO, OK, CANCEL, RETRY и т.д.) после закрытия окна или истечения времени автозакрытия.
■ Если время автозакрытия установлено 0 или не указано, окно не закроется автоматически.
■ MESS* предназначено для параллельного вызова. Т.е., основное окно не блокируются и с ним можно продолжать работать. Выполнение комманд до закрытия окна сообщения блокируется.
■ MESS- предназначено фоновой работы окна. Основное окно не блокируется, можно выполнять команды. Режим хорошо подходит для отладки скрипта.
■ MESS= полностью блокирует работу основного окна. Можно использовать для специальной отладки скрипта.
■ MESS блокирует работу основного окна, но не блокирует весь цикл обработки сообщений.
Example:
◆ MESS Недостаточно физической памяти \n подключить файл подкачки @ Подключить файл подкачки #YN * 10000 $ N
Remarks:
※ Команду можно использовать как в готовом скрипте, так и при запуске из комстроки, т.е., запустить так:
PECMD.EXE MESS Недостаточно памяти! @ Подключить файл подкачки #YN *10000 $ N

LPOS - поиск заданного символа в строке (с начала строки)

Format: LPOS [ *] [ *] [-case] <имя переменной> <=> <символ>, <число>, <строка>
Function: Функция возвращает порядковый номер N-ного (<число>) символа (<символ>) в исходной последовательности (<строка>). Отсчет от начала последовательности.
Parameters:
■ <имя переменной> имя переменной для сохранения результата, [-case] для различения регистра букв (т.е, различать "а" и "А")
■ <символ> символ или набор символов для поиска
■ <число> какой по порядку символ (или набор символов) искать (1 - первый, 3 - третий). По-умолчанию (если упущено) - 1.
■ <строка> исходная последовательность символов
■ LPOS *: найти начало подстроки, заключенной между "=" и ","; в качестве подстоки может быть любой символ, пробел или группа символов.
■ LPOS **: похоже на LPOS *, но возвращает порядок слова в строке
■ LPOS ***: похоже на LPOS **, но позволяет использовать -qu для совместимости с MSTR, $ вместо "пробела", # вместо TAB, или элементы, указанные в -delims:(\n\r\t\v\f\b)
Example:
◆ LPOS iPos=a,2,123A56R1234A6Uabcdef //Результатом будет 12 (%iPos%) - т.е., порядковый номер второй буквы "A"
◆ LPOS iPos=|,1,123A56|1234A6|abcdef //Результатом будет 7 (%iPos%) - т.е., порядковый номер первого встеченного символа "|"
◆ LPOS* P2=B B,,AA EE B B DD //Поиск начала подстроки B B в исходной строке AA EE B B DD. Результат P2=7 (т.е., искомая фраза начинается с седьмого символа).
◆ LPOS*** P2="BB FF 199",,AA XX EE "BB FF 199" DD //Поиск фразы "BB FF 199" в исходной строке AA XX EE "BB FF 199". Результат P2=4 (т.е., искомая фраза в кавычках - это четвертое "слово")

RPOS - поиск заданного символа в строке (с конца строки)

Format: RPOS [-case] <имя переменной> <=> <символ>, <число>, <строка>
Function: Функция возвращает порядковый номер N-ного (<число>) символа (<символ>) в исходной последовательности (<строка>). Отсчет от конца последовательности.
Parameters:
■ <имя переменной> имя переменной для сохранения результата, [-case] для различения регистра букв (т.е, различать "а" и "А")
■ <символ> символ или набор символов для поиска
■ <число> какой по порядку символ (или набор символов) искать (1 - первый, 3 - третий). По-умолчанию (если упущено) - 1.
■ <строка> исходная последовательность символов
Example:
◆ RPOS -case iPos=А,2,Аба-ба-Га-лА-Ма-Га //Результатом будет 1 (iPos=1) - т.е., позиция второй буквы "А", если искать её (с учётом регистра -case) с конца. Без учета регистра можно искать только английские буквы (для русских букв правильно не работает - русские "А" и "а" для PECMD - это не одна и та же буква).
◆ RPOS iPos=p,3,Happy Birthday Puhpol //Результатом будет 4 - это позиция 3-й буквы "p", если искать с конца последовательности.

LSTR - перехват указанного количества символов из заданной последовательности (с начала строки)

Format: LSTR
  • <имя переменной> <=> <число>, <строка>
    Function: Функция для перехвата указанного количества символов из заданной последовательности слева, возвращает результаты в указанном имени переменной.
    Parameters:
    ■ <имя переменной> имя переменной, в которой будет сохранен результат
    ■ <число> определяет количество символов перехвата
    ■ <строка> входные данные для обработки, ограничение
    Example:
    ◆ LSTR AStr=2,1234567890 //Результатом будет 12, т.е., 2 первых символа
    ◆ LSTR AStr=5,ABCDEFGH13 //Результатом будет ABCDE, т.е., 5 первых символов
    Remarks:
    Если <число> меньше 1 либо превышает длину исходной строки, результатом будет вся исходная строка (эквивалент копирования)

RSTR - перехват указанного количества символов из заданной последовательности (с конца строки)

Format: RSTR
  • <имя переменной> <=> <число>, <строка>
    Function: Функция для перехвата указанного количества символов из заданной последовательности с конца строки, возвращает результаты в указанном имени переменной.
    Parameters:
    ■ <имя переменной> имя переменной, в которой будет сохранен результат
    ■ <число> определяет количество символов перехвата
    ■ <строка> входные данные для обработки, ограничение
    Example:
    ◆ RSTR AStr=2,1234567890 //Результатом будет 90, т.е., 2 последних символа
    ◆ RSTR AStr=5,ABCDEFGH13 //Результатом будет FGH13, т.е., 5 последних символов
    Remarks:
    Если <число> меньше 1 либо превышает длину исходной строки, результатом будет вся исходная строка (эквивалент копирования)

CALC - арифметические операции с числами

Format: CALC [-base=2|8|10|16|N] [#] <Переменная> <=> <Выражение> [#[#][десятичное][E|F|G]]
Function: Команда производит арифметические операции, результат заносится в переменную. E - для научной работы, F - десятичная форма, G - автоматически использовать относительно простой способ.
Parameters:
■ -base=2|8|10|16|N в каком формате обрабатывать результат. Результат будет: в двоичном 0bNNNN, 8-ном 0oNNNN, 10-ном (непосредственно число), или 16-ном 0xNNNN форматах.
■ N используется для нестандартных НЕХ. Также применяется для операций с плавающей запятой (округленно).
■ префикс (лидирующий символ) "#" указывает, что все переменные обрабатываются как int64 тип данных, если "#" лидирующий упущен - тогда double-data handling
■ <Выражение> - это конкретное значение (либо существующая переменная), поддерживаются научные обозначения.
■ символы поддерживаемых операций: > (равно), >= (больше или равно), < (меньше), <= (меньше или равно), <> (не равно), "|" (логическое "И"), "&" (логическая конюнкция), "@" (исключающее "ИЛИ"), "+" (плюс), "-" (минус), "*" (умножить), "/" (разделить); "%" (процент), "^" (степень).
■ скобки () [] {} задают уровень приоритета. Данные с плавающей запятой поддерживают TGMKS-суффикс. K=1024 S=512
■ поддерживаются математические константы: e (иррациональная константа натурального логарифма 2,718281828), pi (3.14159...), в общей сложности двух математических констант.
■ суффикс "#" указывает, что результат операции по обработке данных двойного типа, с количеством знаков после запятой для сохранения, максимум 16
■ если результат операции нечисловой, он заменяется "0". "#" в сочетании с "#" сохраняет выше 0.
■ поддерживаются математические функции abs(a), arccos(a), arcctg(a), arcsin(a), arctan(a), ceil(a), cos(a), ctg(a), deg(a), div(a,b), exp(a), frac(a), floor(a), hypot(a,b), int(a), lg(a), ln(a), log(a,b), max(a,b), min(a,b), mod(a,b), pow(a,b), pow10(a), rad(a), rand(a), round(a), shl(a,b), shr(a,b), sin(a), sqrt(a), tan(a), xor(a,b), not(a) [可~a], lnot(a) [可!a]
Example:
◆ CALC #Sum=128+32*22 // Результатом будет Sum=832
◆ CALC #Sum=128^2 // 128 в квадрате Sum=16384
◆ CALC Sum=[1+2]*7/((3-{1+1})*2) // Результатом будет 10,5 (3*7/2), скобки могут быть () [] {}
◆ CALC #Sum=%RANDOM% % 1000 // Генерация случайных чисел в диапазоне 0-999
Remarks:
※ данные для обработки могут быть присвоены через ENVI либо быть результатом предыдущей операции или команды
※ для сравнения чисел также можно использовать IFEX (IFEX %Num2%>%Num1%,ENVI MIN=%Num1%)
※ данные больше чем 16 в 10-й степени не различаются (± 9007199254740991)
※ для генерации случайных чисел можно использовать %RANDOM%, можно указать диапазон для генерации.
Joker-2013, PECMD позволяет сделать то, что обычно делают отдельными утилитами (например, от NirSoft), а также батниками (причем почти все - намного проще). Ну, и самое главное - без наличия знаний и языков программирования легко организовать графический интерфейс (даже с поддержкой горячих клавиш). Готовый скрипт может запускаться как отдельно (PECMD.EXE LOAD MyScript.ini или даже PECMD.EXE MyScript.ini), так и быть интегрирован в PECMD.EXE (т.е., получится самостоятельная ехе-шка).

Демонстрация вывода сообщений в утилите (создайте в блокноте файл demo.ini, и внесите в него текст). Запускать pecmd.exe demo.ini

MESS Первое сообщение\nв отдельном окне\nс таймингом и Y/N @ #YN *10000
MESS Второе сообщение\nв отдельном окне\nбез тайминга @ #OK
TIPS Внимание!,\nВот такое\nсообщение\nв трее!!!\n ,5000,1,pecmd.exe#0 `\n - перенос текста на след.строку, ,5000 - время отображения (мс), pecmd.exe#0 - иконка 0 из файла pecmd.exe
WAIT 5000 `Подождать 5 секунд
TEXT И ещё можно вот так показать... #0x5555FF L200 T400 R1023 B764 $64* `Где #0x5555FF - цвет, L/T/R/B - позиция текста (слева/сверху/справа/низ), $64 - размер шрифта
WAIT 5000 `Подождать 5 секунд
TEXT `Погасить текст на экране

Простенькое окно с выбором (после нажатия на кнопку выполнение в скрытом режиме с ожиданием батника)

CALL @Windows1
_SUB Windows1,W800H220,Выбор операционной системы,,
ENVI @this.Font=40:Tahoma
LABE Text1,L10T20W770H50,Какой Windows необходимо установить?,,0x000088,36
LABE Text2,L350T95W90H50,или,,,40
ITEM Win7,L40T90W290H70,Windows 7,EXEC =!win7_setup.cmd,,
ITEM Win8,L460T90W290H70,Windows 8,EXEC =!win8_setup.cmd,,
_END

Довольно сложный скрипт - просмотр иконок в выбранной библиотеке (или exe-файле) с индикацией номера

Скрипт интересен именно практическим применением для разработчиков РЕ-сборок и тех, кто пишет скрипты для PECMD. Ведь вместо того, чтобы добавлять "свою" иконку (например, для ярлычка или окна скрипта PECMD), подчас можно использовать готовые иконки из набора той же винды. Благо иконок в системных файлах много... Нужно только найти подходящую и определить её номер. Скачать скрипт, зеркало.

А это скрипт для получения технических характеристик компа

В этом скрипте собрал самые актуальные технические сведения о ПК: загрузка процессора, объём свободной и доступной ОЗУ, имя ОС/РЕ, название процессора и его частота, выбор раздела (только Fixed-type, т.е., флешки в него не попадут) с информацией о свободном и полном размере и меткой диска, получение развернутой инфы о выбранном разделе. При этом инфа об объёме свободной памяти и загрузке процессора обновляется каждые 500мс (информацию о свободном размере разделов, по большому счёту, тоже желательно было бы обновлять... но не хочется терзать каждые полсекунды накопители).
Те, кто захочет покопаться в скрипте, обратите внимание, как легко и просто получается информация о памяти:
TEAM IFEX MEM=?,FreeR|MESS %FreeR% Mb
TEAM FIND MEM=?,FullR|MESS %FullR% Mb

Точно также легко получить размер раздела в байтах (доступный или полный):
FIND %CurDrv%\=?,FullS|MESS %CurDrv% : free %FullS% bytes
IFEX %CurDrv%\=?,FreeS|MESS %CurDrv% : full %FreeS% bytes

Да и получение данных из реестра - тоже сказка: нужно знать только ключ, нужное имя и тип записи
REGI $HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0\ProcessorNameString,CurCP
Прикрепил свой мини-Help с вариантами применения команд (он не делался для публики, но, думаю, пригодится желающим написать скрипт).
Вложение

Текстовый файл с примерами команд (коментарий отделен тильдой `)



Последний раз редактировалось: conty9 (2016-03-18 16:37), всего редактировалось 20 раз(а)

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

    Sergey.del
  • 7
  • Стаж: 2 года 9 месяцев
  • Сообщений: 58
  • Репутация:1

    [+] [-]
  • Откуда: Новороссийск, Россия
1. Отсюда https://yadi.sk/d/hRChOI_edq4cF тащите файл help_2_command.txt (кодировка UTF-8)
Поправьте, пожалуйста, ссылку, а то получилось так:
"http://https//yadi.sk/d/hRChOI_edq4cF"
Кстати, взгляните сюда Detailed Explanation of PECMD in WinPE—-PECMD.INI File Configuration
Это оно?

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

    conty9
  • 100
  • Стаж: 2 года 8 месяцев
  • Сообщений: 913
  • Репутация:66

    [+] [-]
Sergey.del, да, частично оно. Но, во-первых - для старой версии (4.0.0501) с более скромными возможностями (по сравнению с новыми версиями 2012). Во-вторых, там упущены некоторые команды даже для неё (например, не упоминается о командах READ, WRIT - это команды для чтения/записи файла). В новых версиях возможности обработки значительно расширены. И, хотя "старый" синтаксис обычно работает, без правки "старых" скриптов порой не обойтись.

Несколько примеров использования команд в PECMD для старой версии

BROW File, C:\Install*.Wim;Install*.Esd;Install*.Swm, Выберите файл wim/esd/swm., WIM/ESD/SWM `Открыть диалог выбора файла (с маской Install*.Wim/Esd/Swm). После выбора в переменной %File% будет полный путь к файлу. Начать с корня диска С:\
BROW Folder, *C:\, Выберите папку, `Открыть диалог выбора папки. После выбора в переменной %Folder% будет полный путь к папке. *** В сильно урезанных РЕ может не работать окно отображения каталогов, выбор будет невозможен!
CALL $SHELL32.DLL,DllInstall,#1,U `Вызвать библиотеку
CALL ASK `Вызов подпрограммы (начинается с _SUB ASK ... заканчивается _END)
DEVI %WinDir%\inf\net*.inf `Установить все net*.inf устройства из папки %WinDir%\inf
DFMT E: FAT32,RamDisk,2048,1 `Форматировать диск E: под FAT32 с меткой диска RamDisk, размером кластера 2048 байт и со сжатием.
DFMT R: NTFS,Disk `Форматировать диск R: под NTFS с меткой Disk, стандартным размером кластера (512 байт) и без сжатия.
DISP W1024 H768 B32 `Разрешение экрана 1024х768, 32бита
ENVI $Desktop=X:\Documents and Settings\Default User\Рабочий стол `Присвоить системную переменную Desktop
ENVI OPDir=Y:\TOOLS `Присвоить переменную
EXEC !CMD.EXE /C "ECHO.>%WinDir%\CHM.OK" `В комстроке запустить (без ожидания, в скрытом режиме) CMD.EXE и с его помощью создать пустой файл %WinDir%\CHM.OK
EXEC @ATTRIB +H "%USERPROFILE%\Default User\Рабочий стол" `Установить атрибут "скрытый" для папки "Рабочий стол"
EXEC =!CMD.EXE /C "REGSVR32 /S X:\i386\SYSTEM32\SEND.DLL" `Выполнить ("=" ждать отработки, "!" в скрытом окне)
FDIR pathr=%full% `Получить путь к файлу из полного пути (т.е., получить из имени всё до последнего "\")
FEXT ext=%full% `Получить расширение файла из полного пути или имени (т.е., получить из имени всё после последней ".")
FILE %WS%\SMSS.EXE `Удалить файл (или папку FILE X:\TEMP)
FILE .\PE3\filepaths.txt=>%AppData% `Скопировать .\PE3\filepaths.txt в %AppData% (если нужно перенести, тогда "=>" меняем на ">>")
FILE X:\i386\TEMP\*.* `Удалить все файлы в %Темр%
FIND KEY=#112,ENVI NETyes=ok!ENVI NETyes=No `Проверяем нажатие кнопки с кодом #112 (F1), если нажата - присваиваем NETyes=ok, иначе - NETyes=No
FIND MEM<384,FBWF P40 L96 H192!FBWF P50 L160 H256 `Если общей памяти меньше 384, запускаем FBWF с параметрами P40 L96 H192, иначе - с другими
FIND NOTEPAD.EXE,MESS NOTEPAD @ #YN *10000 `Если запущен блокнот, вывести сообщение NOTEPAD
FORX %CURDIR%\VMWAREUSER.EXE,VM,1,TEAM EXEC %VM%
FORX %WinDir%\System32\*.ocx,Regocx,0,CALL $%Regocx% `Искать все ocx в сис.каталоге и зарегистрировать их
FORX *.exe,File,0,CALL SS `Искать все exe-файлы в текущем каталоге, их имя в переменной %File% передается на обработку подпрограмме SS
FORX @*,Folder,0,CALL SS `Искать все папки в текущем каталоге, их имя в переменной %Folder% передается на обработку подпрограмме SS
GETF B:\1.ini,0x0#0x10,FileData `Получить в переменную %FileData% HEX-значение с 0x0-го по 0x10 (либо в десятичном - GETF B:\1.ini,0#16,FileData)
GETF C:\pagefile.sys,-1,FileLength `Получить в переменную %FileLength% размер файла C:\pagefile.sys в байтах
HASH %SystemRoot%\System32\UserInit.EXE,UserInit,Md5 `Подсчет контрольной суммы файла MD5 (CRC32, SHA1, SHA256)
HIVE BCD,F:\BOOT\BCD `Скрыть файл BCD (присвоить аттрибут "скрытый")
HOTK Ctrl+Shift+#0x31,!resolution.cmd 800 600 `Назначить горячую клавишу Ctrl+Shift+1. Если будет задействована эта комбинация, то произойдёт запуск батника resolution.cmd с параметрами 800 600
IFEX MEM>1500,ENVI DT=%SystemRoot%\TEMP!ENVI DT=C:\DRVTEMP `Если памяти > 1500Мб, назначить переменную, иначе другое значение
IFEX PECMD2TMP.EXE, WAIT 1500 `Если запущена программа PECMD2TMP.EXE, ждать 1500мс
IMAG Image1,L8T380W140H70,%CurDir%\logo.gif,EXEC %CurDir%\Setup.EXE,#0xFF00FF,2 `Картинка %CurDir%\logo.gif указанного размера, при нажатии запуск %CurDir%\Setup.EXE
INIT IU `Показать значок PECMD в трее / INIT U - не показывать
KILL SMSS.EXE `Убить процесс
LINK !%Desktop%\RASPPPOE,RASPPPOE.CMD,,RASDIAL.DLL#19 `Создать ярлык на раб.стол с иконкой 19 из библиотеки RASDIAL.DLL
LINK %Programs%\Стандартные\Блокнот,%WS%\NOTEPAD.EXE `Создать ярлык блокнота
LOAD %WS%\WXRS.INI `Загрузить и выполнить скрипт %WS%\WXRS.INI
LOGO %WS%\LOGO2.JPG `Логотип загрузки (сразу после запуска РЕ, до загрузки рабочего стола)
LOGS %W%\PECMD.LOG `Записать логи PECMD (для отладки скриптов)
MESS Clear Complete!@Clear Temp #ok *1000 Сообщение об очистке
MESS Memory is low\n \setting yes in 5 seconds #YN *5000 $Y `Сообщение с запросом (Да/Нет) / FIND $%YESNO%=YES,CALL PAGEFILSET
MESS Папка C:\Windows имеется!\nНажмите [OK] для выхода.`Сообщение с подтверждением.
MOUN X:\WXPE\SYSTEM32\TOOLS.WIM,Y:\TOOLS\,1,%TEMP% `Монтирование WIM в папку Y:\TOOLS\, монтируется раздел 1 архива. Для записи текущих изменений используется %TEMP%
NAME name=%full% `Получить имя файла %name% (без расширения!) из полного пути %full%. Будет получено имя от последнего "\" до первой "." после него.
NUMK 1 `Включить NumLock (NUMK 0 - выключить)
PAGE %DRIVE%\Pagefile.sys 512 1024 `Подключить файл подкачки %DRIVE%\Pagefile.sys с минимальным размером 512Мб и максимальным 1024Мб
PATH %PT%\TempPath `Создать каталог %PT%\TempPath
PATH @%path% `Установить путь (@ - означает относительно текущего каталога)
PINT %SystemRoot%\system32\devmgmt.msc `Добавление в меню "Пуск"
PINT %SystemRoot%\system32\notepad.exe,Taskband `Добавление в таскбар (только 7/8)
PUTF %CurDir%\Memu.DAT,0x400,0x23 0xAD 0x1C 0x80 0x6F `Изменяет бинарные данные в указанном файле.
RADI RadioButton1,L32T314W100H20,WimShExt.DLL,ENVI @Group1=%RadioButton1%,1,1 `Радиокнопка (т.е., группа чекбоксов, для которых можно выбрать только одну из группы)
RAMD ImDisk,L64,NTFS,B: `Создать RAM-диск В:\ на 64Мб с NTFS с помощью ImDisk
READ %CurDir%\Memu.LST,-1,LastLine `Чтение из файла последней строки
READ %CurDir%\Memu.LST,10,CurLine `Чтение из файла 10-й строки
REGI $HKLM\System\CurrentControlSet\Control\SystemStartOptions,tp `Считать значение из SystemStartOptions и передать в переменную %tp%
REGI HKCR\Drive\shell\ImDiskSaveImage\command\=rundll32.exe imdisk.cpl,RunDLL_SaveImageFile %L `Добавить в реестр
REGI HKCU\Software\als\s\ff=@X `аналог reg add "HKCU\Software\als\s" /f /v "ff" /t REG_BINARY /d
REGI HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\{7007ACC7-3202-11D1-AAD2-00805FC1270E}\! `Удалить ветку реестра
RUNS %MyName% EXEC !%CurDir%\SetIP.CMD
SCRN ScrW,ScrH `Функция возвращает текущее разрешение экрана (присваивает его переменным ScrW,ScrH)
SEND #0x12_,#0x09_,#0x09^,#0x12^ »т SEND #0x11_,A_,A^,#0x11^ `Послать код нажатой кнопки (т.е., имитировать нажатие кнопки)
SEND #121 `Имитировать нажатие кнопки #121
SERV !AudioSrv `Запустить сервис
SERV FBWF `Операции с сервисами
SITE %USERPROFILE%\SRNPE\SRNPE\Start Menu\programs,+H+R `Установить атрибуты (+A - archive, +H - hidden, +R - readonly, +S - system)
SIZE iSize=D:\file.avi `Получить размер файла в байтах в переменную %iSize%
STRL iLen=1234567890 `Получить длину значения или переменной
SUBJ B:,D:\MyTools `Аналог dos-команды Subst. Позволяет смонтировать папку D:\MyTools как диск B:
TEAM PATH %SystemDrive%\TEMP|EXEC @PECMD.EXE CALL $SHELL32.DLL,DllInstall,#1,U `TEAM - запуск группы комманд, они разделяются "|"
TEMP @Delete очистить %TEMP% без подтверждения
TEMP Delete очистить папку %TEMP%
TEXT Запуск Server 2003 PE...#0xFFFFFF L415 T20 R800 B750 $20* `Вывести текст Запуск Server 2003 PE на экран, цвет текста #0xFFFFFF, в нужной позиции (L/T/R/B) с размером шрифта 20
TIME Timer1,10000,FILE %TEMP%\*.*
TIPS Attention!,\nThe folder is cleared!,5000,1,PeSet.exe#0 `Всплывающая в трее подсказка (5сек.), 0-я иконка PeSet.exe
TIPS Шапка,Сообщение,50000,4,SHELL32.DLL#9 `Сообщение в трее
USER Windows SP3 PE,2010yg `Создать пользователя
WAIT 500 `Ждать 500мс
WALL X:\i386\SYSTEM32\LOGO.JPG `Подключить обои X:\i386\SYSTEM32\LOGO.JPG
WRIT B:\BOOT.INI,-1 `Удалить из файла B:\BOOT.INI первую строчку
WRIT B:\BOOT.INI,+0,C:\AVLDR.NT6=Window_7_PE `Добавить в файл B:\BOOT.INI фразу C:\AVLDR.NT6=Window_7_PE
** Для комментирования записей можно использовать либо "//", либо символ "`". Всё, что находится в строке после них, не исполняется.
Свежую стабильную версию выложил тут. Имеется также небольшая утилитка для получения кодов нажатой клавиши и выбора цвета (залил на сайт, см. ниже сообщения).
Встроенный хелп - если просто запустить сабж. Хелп на китаяйском, но в уникоде - копируем текст и переводим в гугле. PECMD╘н╩╝.EXE - это неупакованный вариант, PECMD.EXE - упакованный (UPX), PECMDEDIT.exe - редактор с проверкой синтаксиса (увы, чинезе). В папке ╩╛└¤ - образцы скриптов.

Скрипт 78RePack - как смог, так и описал.

//Определяем буковку диска, на котором находится %TEMP%, присваиваем её %TDrv%
FDRV TDrv=%TEMP%
//Ищем файлы *.wim в папке 78repack на диске %TDrv%. Если найден файл, его имя вносим в переменную %WFil% и выполняем вызов подпрограммы PthName
FORX %TDrv%\78repack\*.wim,WFil,0,CALL PthName
//Если отсутствует %WFil%, ищем файлы *.esd в папке 78repack на диске %TDrv%. Если найден файл, его имя вносим в переменную %WFil% и выполняем вызов подпрограммы PthName
IFEX %WFil%,!FORX %TDrv%\78repack\*.esd,WFil,0,CALL PthName
//Если отсутствует %WFil%, ищем файлы *.swm в папке 78repack на диске %TDrv%. Если найден файл, его имя вносим в переменную %WFil% и выполняем вызов подпрограммы PthName
IFEX %WFil%,!FORX %TDrv%\78repack\*.swm,WFil,0,CALL PthName
//Если отсутствует %WFil%, устанавливаем переменные %XFil%, %PFil%, %NFil%
IFEX %WFil%,!TEAM ENVi XFil=|ENVI PFil=|ENVI NFil=Archive is not selected by the user
//Переход к подпрограмме @&Window4
CALL @&Window4
//Подпрограмма @&Window4 (рисуем окно с размерами 410х230), названием 78RePack (wim/esd/swm/rwm) и иконкой 0 из 78Setup.exe
_SUB &Window4,W410H230,78RePack (wim/esd/swm/rwm),,78Setup.exe#0
//Устанавливаем системные переменные %&p% и %&V%
TEAM ENVI &p=0|ENVI &V=
//Рисуем группу слева/сверху/ширина/высота 7/7/390/88 с названием Archive
GROU Group1,L7T7W390H88,Archive
//Рисуем кнопку 310/24/80/26 с именем Select. При нажатии будет вызвана подпрограмма SelArch
ITEM Button1,L310T24W80H26,Select,CALL SelArch
//Рисуем кнопку Info. При нажатии будет вызвана группа:запуск с ожиданием и в скрытом режиме (=!) cmd.exe, и последующий запуск (без ожидания в обычном режиме) блокнота с файлом
ITEM Button2,L14T28W80H20,Info,TEAM EXEC =!cmd.exe /c WLImagex.exe info "%WFil%">"%NFil%.txt"|EXEC notepad %NFil%.txt,
//Рисуем кнопку Verify...
ITEM Button3,L108T28W80H20,Verify,CALL ArchVrf,
//Рисуем кнопку Extract to...
ITEM Button4,L202T28W80H20,Extract to...,CALL ArchXtr,
//Рисуем надпись Selected:, шрифт 10
LABE Label1,L10T56W45H13,Selected:,,,10
//Готовим позицию для имени архива (имя будет в системной переменной %@Label2%), цвет 0x000055, шрифт 11
LABE Label2,L58T55W336H16,,,0x000055,11
//Рисуем надпись Folder:, шрифт 10
LABE Label3,L22T75W46H13,Folder:,,,10
//Готовим позицию для папки архива (имя будет в системной переменной %@Label4%), цвет 0x000055, шрифт 11
LABE Label4,L58T74W336H16,,,0x000055,11
//Присваиваем @Label2 имя файла, а @Label4 имя папки
TEAM ENVI @Label2=%NFil%.%XFil%|ENVI @Label4=%PFil%
//Рисуем группу с названием Repack
GROU Group2,L7T100W390H88,Repack
//Рисуем надпись conty9 @ 2015 с цветом 0xaaaaaa и шрифтом 12
LABE Label5,L297T98W92H16, conty9 @ 2015 ,,0xaaaaaa,12
//Делаем группу из 4-х радиокнопок (активна только одна)
RADI RadioButton1,L14T112W154H20,Convert to WIM (Optimize),ENVI TypF=Wim,1,1
RADI RadioButton2,L14T130W155H20,Convert to WIM (Ultra Pack),ENVI TypF=WmU,0,1
RADI RadioButton4,L14T148W155H20,Convert to ESD (Windows 8.1),ENVI TypF=Esd,0,1
RADI RadioButton3,L14T166W155H20,Split to SWM (1000 Mb each),ENVI TypF=Swm,0,1
//По-умолчанию выбрана первая кнопка
ENVI TypF=Wim
//Рисуем прогресс-бар
PBAR PBAR1,L170T122W220H20,0
//Заготовка под индикацию прогресса в цифрах (+цвет/шрифт)
LABE PBAR1_TEXT,L258T157W44H22,,,0x0000FF,16
//Кнопка "Отмены" с групповой операцией: убить процесс WLImagex.exe, назначить переменную Brk, удалить временные файлы %WFil%*?
ITEM Button5,L170T155W80H24,Cancel,TEAM KILL WLImagex.exe|ENVI Brk=1|FILE %WFil%*?,
//Кнопка "Start", с вызовом нужной подпрограммы (определяется в переменной %TypF%, блок радиокнопок)
ITEM Button6,L310T155W80H24,Start,CALL Arch%TypF%,
//Если отсутствует %WFil%, назначаем системные переменные кнопок =0 (т.е., блокируем их активность)
IFEX %WFil%,!TEAM ENVI @PBAR1=0|ENVI @PBAR1_TEXT=|ENVI @Button2.Enable=0|ENVI @Button3.Enable=0|ENVI @Button4.Enable=0|ENVI @Button6.Enable=0|ENVI @Button6.Enable=0|EXIT -
//Конец. В смысле подпрограммы.
_END
//Подпрограмма для разборки имени на составляющие
_SUB PthName
//Получить в %NFil% имя файла, в %XFil% - его расширение, в %PFil% - путь к файлу
TEAM FNAM NFil=%WFil%|FEXT XFil=%WFil%|FDIR PFil=%WFil%
//Присвоить %@Label2% имя с расширением, а %@Label4% - путь.
TEAM ENVI @Label2=%NFil%.%XFil%|ENVI @Label4=%PFil%\
_END
//Подпрограмма для диалога выбора архива
_SUB SelArch
//Обнулить перменную %WFl%
ENVI WFl=
//Открыть диалог выбора файла с маской "*.Wim;*.Esd;*.Swm;*.Rwm", названием диалога "Select wim/esd/swm/rwm file" и поддерживаемыми расширениями WIM/ESD/SWM/RWM
BROW WFl, $\*.Wim;*.Esd;*.Swm;*.Rwm, Select wim/esd/swm/rwm file, WIM/ESD/SWM/RWM
//Если файл выбран (имеется на диске), присвоить %WFil% полный путь к нему и вызвать подпрограмму PthName
IFEX "%WFl%",TEAM ENVI WFil=%WFl%|CALL PthName
//Если есть %WFil%, вызвать UnBlkOp
IFEX %WFil%, CALL UnBlkOp
_END
//Подпрограмма проверки архива
_SUB ArchVrf
//Вызвать BlockOp (заблокировать остальные кнопки)
CALL BlockOp
//Запустить проверку (обычное окно с ожиданием завершения) архива "%WFil%"
EXEC =cmd.exe /k WLImagex.exe verify "%WFil%"
//Вызвать UnBlkOp (разблокировать остальные кнопки)
CALL UnBlkOp
_END
//Подпрограмма распаковки архива
_SUB ArchXtr
//Выбрать папку для распаковки
BROW DirXtr,*,Select a folder. Will create a subfolder: %NFil%.Unp,
//Если папка выбрана (имеется), тогда создать в ней подкаталог %DirXtr%%NFil%.Unp
IFEX %DirXtr%,PATH %DirXtr%%NFil%.Unp!EXIT -
CALL BlockOp
//Запустить распаковку (обычное окно с ожиданием завершения) всего архива "%WFil%" в папку "%DirXtr%%NFil%.Unp"
EXEC =cmd.exe /k WLImagex.exe apply "%WFil%" all "%DirXtr%%NFil%.Unp"
CALL UnBlkOp
_END
//Подпрограмма склейки многотомного архива
_SUB ArcJoin
//Запустить склейку в скрытом режиме с ожиданием. Все сообщения каждые 200мс будут передаваться подпрограмме обработки прогресса операции RpakMsg
EXEC* --cmd::200:RpakMsg &V=!WLImagex.exe join "%PFil%\%NFil%.wim" "%PFil%\%NFil%*.swm"
//Разблокировать кнопки (CALL UnBlkOp). Если переменная $%Brk%=1 (операция была прервана), выйти из подпрограммы
TEAM CALL UnBlkOp|FIND $%Brk%=1,EXIT -
//Удалить файлы %PFil%\%NFil%*.swm, изменить переменную обрабатываемого архива на %PFil%\%NFil%.wim, вызвать подпрограмму PthName
TEAM FILE %PFil%\%NFil%*.swm|ENVI WFil=%PFil%\%NFil%.wim|CALL PthName
_END
//Подпрограмма перепаковки с оптимизацией
_SUB ArchWim
SET &p=-1
CALL BlockOp
//Если входной архив многотомный (swm), перейти к подпрограмме склейки, а потом выйти из подпрограммы
FIND $%XFil%=swm,TEAM CALL ArcJoin|EXIT -
//Перепаковка в скрытом режиме с ожиданием. Все сообщения каждые 200мс будут передаваться подпрограмме обработки прогресса операции RpakMsg
EXEC* --cmd::200:RpakMsg &V=!WLImagex.exe optimize "%PFil%\%NFil%*.%XFil%" --recompress --compress=LZX:50 --chunk-size=32768
TEAM CALL UnBlkOp|FIND $%Brk%=1,EXIT -
//Изменить расширение готового файла на wim, изменить переменную обрабатываемого архива на %PFil%\%NFil%.wim, вызвать подпрограмму PthName
TEAM FILE "%WFil%">>"%PFil%\%NFil%.wim"|ENVI WFil=%PFil%\%NFil%.wim|CALL PthName
_END
//Подпрограмма ультра-перепаковки
_SUB ArchWmU
SET &p=-1
CALL BlockOp
FIND $%XFil%=swm,TEAM CALL ArcJoin|EXIT -
EXEC* --cmd::200:RpakMsg &V=!WLImagex.exe optimize "%WFil%" --recompress --compress=LZX:400 --chunk-size=32768
TEAM CALL UnBlkOp|FIND $%Brk%=1,EXIT -
TEAM FILE "%WFil%">>"%PFil%\%NFil%.wim"|ENVI WFil=%PFil%\%NFil%.wim|CALL PthName
_END
//Подпрограмма Swm-перепаковки
_SUB ArchSwm
SET &p=-1
CALL BlockOp
FIND $%XFil%=swm,TEAM CALL ArcJoin|EXIT -
EXEC* --cmd::200:RpakMsg &V=!WLImagex.exe split "%WFil%" "%PFil%\%NFil%.swm" 1000
TEAM CALL UnBlkOp|FIND $%Brk%=1,EXIT -
_END
//Подпрограмма Esd-перепаковки
_SUB ArchEsd
SET &p=-1
CALL BlockOp
FIND $%XFil%=swm,TEAM CALL ArcJoin|EXIT -
EXEC* --cmd::200:RpakMsg &V=!WLImagex.exe optimize "%WFil%" --recompress --compress=LZMS:100 --chunk-size=131072
TEAM CALL UnBlkOp|FIND $%Brk%=1,EXIT -
TEAM FILE "%WFil%">>"%PFil%\%NFil%.esd"|ENVI WFil=%PFil%\%NFil%.esd|CALL PthName
CALL UnBlkOp
_END
//Подпрограмма блокировки кнопок перед началом операций с архивами
_SUB BlockOp
TEAM ENVI Brk=0|ENVI @Button1.Enable=0|ENVI @Button2.Enable=0|ENVI @Button3.Enable=0|ENVI @Button4.Enable=0|ENVI @Button6.Enable=0
_END
//Подпрограмма разблокировки кнопок после окончания операций
_SUB UnBlkOp
TEAM ENVI @PBAR1_TEXT=|ENVI @PBAR1=0|ENVI @ITEM1.Enable=1
TEAM ENVI @Button1.Enable=1|ENVI @Button2.Enable=1|ENVI @Button3.Enable=1|ENVI @Button4.Enable=1|ENVI @Button6.Enable=1
_END
//Подпрограмма обработки прогресса операции
_SUB RpakMsg
//В переменной %&V% находятся текстовые сообщения о ходе процесса. Нам нужно извлечь данные между последними скобками () - например, (34%)
//Группа: получаем позицию последнего символа "(", потом позицию последнего ")", высчитываем положение начала цифр и длину. Потом (MSTR &p=) получаем цифру как символ(ы) и преобразуем её в цифру (CALC &p=%&p%)
TEAM RPOS Pos= (,1,%&V%|RPOS Num=) ,1,%&V%|CALC Pos=%Pos%+1|CALC Num=%Num%-%Pos%-6|MSTR &p=%Pos%,%Num%,%&V%|CALC &p=%&p%
//Если значение < 0, значит, мы ошиблись - выход из подпрограммы
IFEX %&p% < 0,EXIT -
//Если значение не изменилось - выход из подпрограммы
IFEX $%&p% == %&p0%, EXIT -
//Присваиваем системную переменную прогресс-бару
ENVI @PBAR1=%&p%
//Присваиваем системную переменную прогресса в цифрах
ENVI @PBAR1_TEXT=%&p%%%
_END
Вложение

небольшая утилитка для получения кодов нажатой клавиши и выбора цвета



Последний раз редактировалось: conty9 (2017-03-26 18:49), всего редактировалось 6 раз(а)

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

    conty9
  • 100
  • Стаж: 2 года 8 месяцев
  • Сообщений: 913
  • Репутация:66

    [+] [-]
Согласен, с примерами намного проще. Поэтому и стараюсь втянуть побольше народу в эту аферу. :)
Если честно - я потрясен продуманностью и многогранностью PECMD. Для WinPE это лучшее решение "всё-в-одном".

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

    conty9
  • 100
  • Стаж: 2 года 8 месяцев
  • Сообщений: 913
  • Репутация:66

    [+] [-]
Joker-2013, без знания команд программы PeCMD бесполезен. Потому как это просто расширенный командный интерпретатор (как-то так). Т.е., "программирование" для него - это как написание батника под cmd.exe.
Простейший вариант для знакомства с сабжем - набираем в блокноте: MESS Hello World! @ #OK *30000
сохраняем в файл MyScript.ini. Запускаем "PeCMD.exe LOAD MyScript.ini" или даже "PeCMD.exe MyScript.ini"
Другой вариант - в блокноте же (либо в любом текстовом редакторе) вводим
TIPS Attention!,\nThe folder is cleared!,5000,1,
WAIT 5000

и потом пробуем запускать. Уточню, что WAIT 5000 /ждать 5 сек/ нужно в данном случае, чтобы сообщение в трее не погасло при завершении скрипта и выходе из PeCMD, в обычном скрипте ждать не нужно.

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

    Гость
  • Стаж: 47 лет
  • Репутация:

    [+] [-]

А как с китайским бороться в этом окне?
И что это за шрифт?

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

    conty9
  • 100
  • Стаж: 2 года 8 месяцев
  • Сообщений: 913
  • Репутация:66

    [+] [-]
Шрифт задан в ресурсе "Строковая таблица" (первые строчки - размер:шрифт). В оригинале китайский шрифт, но можно подправить на Arial/Tahoma или другой ходовой. Версия 2012 с Arial.
Еще нужно найти, где китайский текст на кнопках (Yes/No/OK/Cancel/...)

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

    conty9
  • 100
  • Стаж: 2 года 8 месяцев
  • Сообщений: 913
  • Репутация:66

    [+] [-]
Небольшой мануальчик по настройке PECMD.exe (версия 201201.80.00.10) под свои нужды. Понадобится редактор ресурсов (Restorator, Resource Hacker, Resource Tuner). Открываем exe-шник в редакторе. Видим такие ресурсы:
1. EXEDATA. В нем единственная пустышка. Пока не знаю, но подозреваю, что ресурс предназначен для интеграции консольных утилит с возможностью запуска из скриптов.
2. INDATA. Три блока данных (2, 3, 4), из которых только третий распознаваемый как текст (или скрипт).
3. SCRIPT. В разделе заготовки-пустышки для скриптов. Если нужно интегрировать скрипт внутрь exe-шника, добавляем текст скрипта в 101. После этого при запуске exe-шника без параметров встроенный скрипт будет запущен автоматически. Условия, при которых выполняются другие встроенные скрипты (102, 103, 201, 202, 203,) неизвестны. Возможно, это определяется языком операционной системы.
4. SCRIPTINIT. Скрипт инициализации. Загадка.
5. Меню. Это меню при запуске PECMD в качестве оболочки. Все, кто загружал 2k10, думаю, видели разноцветный значок в трее, на котором по ПКМ можно вызвать меню. Это именно оно. Оно доступно, когда PECMD используется как оболочка и разрешено отображение иконки PECMD в трее (команда INIT IU).
Остановлюсь на этом моменте немного подробнее. Как я уже писал, основное первичное назначение PECMD - это использование его под WinPE для упрощения написания сценария запуска РЕ. При этом PECMD может выполнять функции оболочки (если его запустить со скриптом командой PECMD MAIN MyStart.ini). В таком режиме он позволяет инициализировать систему, загрузить необходимые драйвера, создать РАМ-диск нужного размера, подключить FBWF (фильтр, позволяющий производить запись на незаписываемые устройства /перенаправляет изменения в память/) и т.д., и т.п. Заканчивается всё загрузкой графической оболочки (MS Explorer, BS-Explorer, ...). Преимущества такого использования в том, что мы можем неоднократно перезапускать графическую оболочку при необходимости - и при этом система продолжит работу.
6. Диалог. Ресурс 302 определяет главное окно PECMD при запуске без параметров (в оригинале - справка по утилите). 10011-10013, 10019, 10023 - не знаю, что за окна. 10016 - вид окон запросов (Yes/No/OK/Cancel/...). Рекомендуется заменить названия на английские, немного уменьшить высоту кнопок и поднять их чуть выше (в оригинале кнопки снизу касаются нижнего края окна запроса - некрасиво это)... или увеличить высоту окна.
7. Строковая таблица. В самом начале находится 4 пункта настройки используемых программой шрифтов (1001-1004). По-умолчанию стоит какой-то китайский шрифт (9:??), "растягивающий" русский текст. Лучше его заменить на ходовой 10:Tahoma (также неплохие результаты получаются при использовании 12:Arial Narrow, 11:Arial Unicode MS, 11:Lucida, 11:Segoe Condensed). Остальное (10001-10025) относится исключительно к РЕ (перетасовка буквы флешки - привязка её к букве U). Рекомендую вообще удалить.
8. RCData. Тут находится единственный ресурс. Судя по всему - это китайская справка по командам, вызываемая при запуске без параметров. При использовании интегрированных скриптов (готовые утилиты на базе PECMD) её можно смело удалить для уменьшения размера.
9. Иконка. Тут находятся иконки. Уточню, что их можно использовать в скриптах (иконка графического меню, иконки всплывающего в трее сообщения).
Готовый вариант PECMD 201201.80.00.10, заменил WinPE меню (менюшка из 2к10) /п.5/, вид окон запросов (Yes/No/OK/Cancel/...) /п.6/, шрифт на Tahoma /п.7/, встроенные иконки /п.9/. Справку не вырезал /п.8/. Такая же х64-версия утилиты.


Последний раз редактировалось: conty9 (2015-04-06 17:40), всего редактировалось 5 раз(а)

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

    korsak7
  • 107
  • Стаж: 2 года 8 месяцев
  • Сообщений: 493
  • Репутация:38

    [+] [-]
Так может поменять справку на аглицкую?

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

    conty9
  • 100
  • Стаж: 2 года 8 месяцев
  • Сообщений: 913
  • Репутация:66

    [+] [-]
korsak7, я не знаю, что это за формат - начинается с ....CMPS.

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

    ivan petro
  • 161
  • Стаж: 2 года 7 месяцев
  • Сообщений: 56
  • Репутация:0

    [+] [-]
1940А тут небольшая утилитка для получения кодов нажатой клавиши и выбора цвета.
Для подбора цветов, цветовой гаммы есть офигенская утилитка ColorPic.
2177начинается с ....CMPS.
В хелпе команда cmps. (упаковка)
Сохранить ресурс, далее PECMD.EXE CMPS -u name.bin name.wcs
Аналогично в обратную сторону PECMD.EXE CMPS -m name.wcs name.wcz
-m не шифровать, только упаковка.

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

    conty9
  • 100
  • Стаж: 2 года 8 месяцев
  • Сообщений: 913
  • Репутация:66

    [+] [-]
ivan petro, ай, молодца! Точно, упаковка. Проверил - даже свои скрипты можно упаковывать и применять их в таком виде. Причем как снаружи, так и при добавлении внутрь.
Может, кому интересно будет - скрипты QemuBootTester (2 версии, упрощенная и полная), прожка из этой темы. Слева - первый вариант, справа - второй.

Страница 1 из 8


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

Текущее время: 20-Авг 15:06

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


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