AutoIt является мощным скриптовым языком, при своём малом размере включает большую базу различных функций. При компиляции утилиты в неё входит основной движок Autoit. Команда exect позволяет вызывать функции Autoit на прямую, создавать переменные с данными и передавать их другим командам.

1. Функции.
  • В справку TCIMG.chm входят не все функции Autoit, только основные: для обработки строковых, математических действий и получения различной информации... Возможно (по мере необходимости) будут протестированы и добавлены другие.
  • Для ознакомления работы всех функций вы можете скачать справочный файл Autoit3.chm (русская версия для v3.3.8.1) или актуальную английскую версию Autoit.chm
  • Если у Вас появятся примеры вызова других функций через команду exect, высылайте, добавлю в справку...
  • Не все функции могут быть запущены через команду exect. Не поддерживаются циклы...

2. Макросы.
  • В команде exect можно использовать макросы Autoit
 Пример записи:

exect=@ProgramFilesDir GLOBALEXECT<a>

3. Переменные.
  • В команде exect можно создавать глобальные переменные.
  • Команда exect при запуске объявляет глобальные переменные для всех команд, в которых они используются (см. Дополнение №23)
 Описание и примеры
 • Переменная - это просто место для хранения данных в памяти, откуда они могут быть быстро получены. Думайте об этом, как о почтовом ящике, куда можно положить данные или забрать их. К примеру, вы можете создать переменную, хранящую в себе ответ пользователя на вопрос или результат математического выражения.

• Каждая переменная в команде exect имеет имя (снова схожесть с почтовым ящиком), которое начинается с префикса $var_ и может содержать цифры и символы латинского алфавита в нижнем регистре. Вот несколько примеров: $var_array, $var_number, $var_string1

• Все переменные в команде exect являются глобальными.

• Переменные сохраняются и сохраняют свои данные до завершения работы утилиты.

a) Присвоение данных переменным.
 Для того чтобы переменной присвоить данные необходимо в команде exect прописать имя переменной, знак равно и данные (или функцию, которая возвращает данные переменной)
Примеры:

exect=$var_i=1 ;; переменной $var_i присвоено значение 1
exect=$var_n=Sqrt(2) ;; переменной $var_n возвращается значение от результата вычисления функции Sqrt
exect=$var_a=StringSplit('1a|2a|3a','|',1) ;; переменной $var_а возвращается массив, созданный функцией StringSplit
exect=$var_s='привет~~мир!' ;; переменной $var_s присвоена строка


б.1) Изменение данных в переменных.
 Данные и тип переменной могут быть изменены только в команде exect. Переменные могут передавать данные друг другу.
Примеры:

exect=$var_i=1 ... exect=$var_i='привет~~мир!'
;; переменной $var_i присвоено значение 1,
;; далее $var_i была присвоена строка, и тип данный изменился с числового на строковый


exect=$var_i1=1 ... exect=$var_i2=$var_i1
;; переменной $var_i1 присвоено значение 1,
;; далее переменной $var_i2 присвоено значение переменной $var_i1

Так же поддерживается обмен данными между массивами и другими переменными.
Примеры:

exect=$var_a=StringSplit('1a|2a|3a','|',1) ... exect=$var_a='привет~~мир!'
;; переменной $var_а возвращается массив, созданный функцией StringSplit,
;; далее переменной $var_а присвоена строка и тип данный изменился с массива на строковый


exect=$var_a1=StringSplit('1a|2a|3a','|',1) ... exect=$var_a2=$var_a1
;; переменной $var_а1 возвращается массив, созданный функцией StringSplit,
;; далее переменной $var_а2 присвоен массив переменой $var_а1


exect=$var_a1=StringSplit('1a|2a|3a','|',1) ... exect=$var_a2=StringSplit('5b|6b|7b','|',1) ... exect=$var_s1=$var_a1[2] ... exect=$var_a1[1]=$var_a2[3]
;; переменные $var_а1 и $var_а2 являются массивами, переменной $var_s1 присваиваются данные из 2-й ячейки массива $var_a1
;; далее 1-й ячейке массива $var_а1 присваиваются данные 3-й ячейки массива $var_a2

б.2) Присвоение данных к существующим переменным.
 • Для сокращения длины командной строки при изменении уже существующих переменных можно воспользоваться операторами:

Оператор
Пример
Описание
+=
 $var_x+=xxx  Прибавляет к переменной $var_x заданные данные xxx
 Тоже самое, что $var_x=$var_x+xxx
-=
 $var_x-=xxx  Вычитает из переменной $var_x заданные данные xxx
 Тоже самое, что $var_x=$var_x-xxx
*=
 $var_x*=xxx  Умножает переменную $var_x на заданные данные xxx
 Тоже самое, что $var_x=$var_x*xxx
/=
 $var_x/=xxx  Делит переменную $var_x на заданные данные xxx
 Тоже самое, что $var_x=$var_x/xxx
&=
 $var_x&='xxx'  Присваивает в конец переменной $var_x заданные данные xxx
 Тоже самое, что $var_x=$var_x&'xxx'
@=
 $var_x@='xxx'  Присваивает в начало переменной $var_x заданные данные xxx
 Тоже самое, что $var_x='xxx'&$var_x

Примеры:

exect=$var_n=5||$var_n+=10||_ViewValues($var_n)
;; пример присвоения к существующей переменной

exect=$var_n=5||$var_n-=10||_ViewValues($var_n)
;; пример отнимания от существующей переменной

exect=$var_n=5||$var_n*=10||_ViewValues($var_n)
;; пример умножения существующей переменной

exect=$var_n=5||$var_n/=10||_ViewValues($var_n)
;; пример деления существующей переменной

exect=$var_s='play'||$var_s&='boy'||_ViewValues('$var_s')
;; пример присвоения строки к существующей переменной

exect=$var_a=StringSplit('1|2|3|4|5|6|7|8|9','|',1)||_ViewValues($var_a)||$var_a[2]+=500||_ViewValues($var_a)||$var_a[3]-=10||_ViewValues($var_a)||$var_a[4]*=15||_ViewValues($var_a)||$var_a[5]/=2||_ViewValues($var_a)||$var_a[6]&=100||_ViewValues($var_a)
;; пример присвоения данных к ячейке существующего 1D массива

exect=$var_aa=_ArrayCreate('5x2')||_ViewValues($var_aa)||$var_aa[1][0]=100||_ViewValues($var_aa)||$var_aa[1][0]+=500||_ViewValues($var_aa)||$var_aa[1][0]*=2||_ViewValues($var_aa)||$var_aa[1][0]/=5||_ViewValues($var_aa)||$var_aa[1][0]&='exit'||_ViewValues($var_aa)
;; пример присвоения данных к ячейке существующего 2D массива



в) Объединение, вычисление данных в переменных.
 Между переменными поддерживаются математические и строковые операции с помощью математических операторов, операторов присвоения и функций Autoit
• Строковый тип переменных необходимо заключать в одинарные кавычки.
• Числовой тип переменных не обязательно заключать в кавычки.
• Объединение, вычисление, присвоение данных переменным могут производится только в команде exect.
Примеры:

;; рассмотрим несколько вариантов из данных переменной первой строки:
exect=$var_i1=20 ... exect=$var_i2=5 ... exect=$var_s1='AAA'

exect=$var_i3=$var_i1+$var_i2 или exect=$var_i3='$var_i1'+'$var_i2' ;; результат $var_i3=25 - пример сложения числовых данных
exect=$var_i3=$var_i1*$var_i2 или exect=$var_i3='$var_i1'*'$var_i2' ;; результат $var_i3=100 - пример умножения числовых данных
exect=$var_i3=$var_i1/$var_i2 или exect=$var_i3='$var_i1'/'$var_i2' ;; результат $var_i3=4 - пример деления числовых данных
exect=$var_i3=$var_i1-$var_i2 или exect=$var_i3='$var_i1'-'$var_i2' ;; результат $var_i3=15 - пример вычитания числовых данных
exect=$var_i3=$var_i1^$var_i2 или exect=$var_i3='$var_i1'^'$var_i2' ;; результат $var_i3=3200000 - пример возведения в степень числовых данных

exect=$var_i3=$var_i1&$var_i2 или exect=$var_i3='$var_i1'&'$var_i2' ;; результат $var_i3=205 - пример объединения данных

exect=$var_i3=$var_i1+$var_s1 ;; результат $var_i3 пустая переменная, т.к. строковая переменная $var_s1 не заключена в одинарные кавычки
exect=$var_i3='$var_i1'+'$var_s1' ;; результат $var_i3=20, т.к. переменная $var_i1 числовой тип, а $var_s1 строковая
exect=$var_i3=$var_i1&$var_s1 ;; результат $var_i3 пустая переменная, т.к. строковая переменная $var_s1 не заключена в одинарные кавычки
exect=$var_i3='$var_i1'&'$var_s1' ;; результат $var_i3=20AAA

• Так же вы можете использовать скобки для более сложных математических выражений.
   exect=($var_n1+$var_n2)*$var_n3-$var_n4^2+($var_n1/2)*$var_n5

• В математических выражениях НЕ должно быть оператора присвоения (объединения) &
• Подобные примеры можно привести и для массивов, в которых участвуют ячейки массива $var_array[1], $var_array[2], ... $var_array[N]
• Т.к. массивы могут содержать разные типы данных, то не надо забывать заключать переменные в одинарные кавычки: '$var_array[1]'

г) Объединение, вычисление данных переменных в функциях.
 • Переменные могут передаваться в функции Autoit.
• Строковый тип переменных необходимо заключать в одинарные кавычки.
• Результаты строковых функций могут быть объедены оператором присвоения &
• Результаты числовых функций могут быть вычисляться в одном вызове с помощью математических операторов + - ^ \ *
• Функции могут быть вложены друг в друга.
Примеры:

exect=$var_s1='строка' ... exect=$var_s2=StringLeft('$var_s1',3) ;; передача значений переменной в функцию

exect=$var_s1='строка' ... exect=$var_s2=StringLeft('$var_s1',1)&StringRight('$var_s1',1) ;; объединение результатов функций &

exect=$var_i1=10||$var_i2=20 ... exect=Round(Exp($var_i1)+Sqrt($var_i2))
;; передача числовых переменных $var_i1 и $var_i2 функциям
;; вычисление результатов функций Exp() , Sqrt()
;; объединение числовых результатов Exp()+Sqrt()
;; передача результата функции Round()


д) Присвоение (вычисление) при условии...
 • В команде exect поддерживается тернарное условие присвоения при вычислении результатов.
• Примеры и описание смотрите в приложении

е) Передача данных переменных другим командам.
 • В любом месте командной строки переменные $var_... будут заменены на соответствующие значения переменных.
• При передаче переменных другим командам не надо заключать их в кавычки.
Примеры:

exect=$var_i=1 ... bufsr=##$var_i ;; переменная $var_i передана команде bufsr

exect=$var_stroka='привет~~мир!' ... bufsr=##$var_stroka ;; переменная $var_stroka передана команде bufsr

exect=$var_aa=StringSplit('1a|2a|3a|4a|5a|6a|7a|8a|9a','|',1) bufsr=##$var_aa[1]~~$var_aa[5]
;; ячейки массива так же могут быть переданы в командную строку

... copys=$var_array||%t
;; если переменная $var_array является массивом (в ячейках которых находятся пути объектов),
;; то без создания временного файла можно направить массив в команду copys (и подобные)
;; все команды работающие со списками могут принимать переменные (массивы)

;; Передача массива командам находится в тестировании. Возможно в каких-то командах пока она не сработает.

• Так же поддерживается передача данных через именную глобальную переменную GLOBALEXECT<> (см. Дополнение №23)
• Все результаты присвоения переменным (вычисления) в GLOBALEXECT записываются последовательно.
• Результат без присвоения (если в команде нет знака равно =) записывается в 1-ю ячейку.
• Так же в GLOBALEXECT записываются массивы созданные (переданные) в exect.
• Минус её в том, что она после каждого вызова команды exect перезаписывается, а переменные $var_ нет (если конечно запланировано).


ж) Рекомендации.
  • Рекомендуется использовать имена переменных одной длины (чтобы не было "пересечения" имён)
    ($var_i1, $var_n1 или $var_sline, $var_array ...)
  • Переменные могут содержать различные типы данных.
  • Для удобства понимания команд рекомендуется использовать суффиксы в переменных $var_
 a(Array) Массив данных ($var_a...)
 b(Binary data) Двоичные данные ($var_b...)
 h(File or window handle) Дескриптор файла, окна и т.д. ($var_h...)
 i(Integer) Целое число ($var_i...)
 f(Boolean) Логический тип, может принимать значения True или False ($var_f...)
 n(Floating point number) Число с плавающей точкой ($var_n...)
 s(String) Строка ($var_s...)
 v(Variant) Неопределенный или изменяющийся тип данных, базовый тип для Autoit ($var_v...)
 t(Struct) Структура в стиле C/C++, для использования в DllCall, в сообщениях WM_*, при обработке данных и т.п. ($var_t...)
 p(Pointer) Указатель на структуру или на её элемент ($var_p...)
 o(Object) Объект ($var_o...)
 
з) Переменных различных типов данных.
   • Есть особенности передачи переменных различного типа данных через команду exect.
  • Заключаются они в том, что при передаче через командную строку невозможно точно определить какого типа переменная передает данные.
  • В большинстве случаев это не принципиально, т.к. в основном передаются строковые или числовые данные.
  • Для точной передачи или определения типа данных необходимо воспользоваться командой Eval('имя_переменной').
  • Имя переменной прописывается БЕЗ знака $.
Примеры:

exect=$var_aa=StringSplit('1|2|3|4','|',2)||$var_i=IsArray(Eval('var_aa'))||_ViewValues($var_i) ;; пример проверки является переменная массивом или нет

exect=$var_aa='Привет'||$var_i=IsArray(Eval('var_aa'))||_ViewValues($var_i) ;; пример проверки является переменная массивом или нет



4. Синтаксис вызова функций и создания переменных.
  • В команде exect не должно быть пробелов и кавычек.
 Описание и примеры
  • Строковые переменные и строки должны быть заключены в одинарные кавычки (апострофы 'стока').
  • Если в строке необходим какой-либо специальный символ (пробел, кавычки...), то:
     - воспользуйтесь функцией Chr(), выделив её из общей строки операторами присвоения.
     - пробелы можно заменить двойным символом тильды ~~
     - кавычки можно заменить двойным символом апострофа ''
 Примеры:

exect=Sqrt( 2 ) ; не правильный вызов функции, т.к. есть пробелы
exect=Sqrt(2) ; правильный вызов функции

exect=$var_k1='строка с пробелами и с "кавычками"' ; не правильное присвоение строки, т.к. есть пробелы и кавычки
exect=$var_k1='строка'&Chr(32)&'с'&Chr(32)&'пробелами'&Chr(32)&'и'&Chr(32)&'с'&Chr(32)&Chr(34)&'кавычками'&Chr(34) ; правильное присвоение

exect=StringUpper('текст~~с~~пробелами~~и~~'''кавычками''') GLOBALEXECT<a>
;; правильный вызов функции



5. Получение данных.
  • В команду exect можно передавать различную информацию.
 Описание и примеры
  • Передача информации происходит только путём присвоения информации заданной переменной.
  • Перед параметрами необходимо добавлять символы ##
  • Перед некоторыми параметрами добавляется третий символ @, $, # и др.

 
##Ввод данных. ##Input!!Output или ##Input??Mode (рекомендуется)
Input - получение данных в команду, возможны варианты:

  строка - к примеру пароль

  @строка - к примеру @c:\test.txt (путь передаётся в виде строки)

  ?путь - к примеру ?%WINDIR%\test.txt (путь переводится в абсолютный и передаётся в виде строки).

  >Params - строка параметров без приставки info см. Дополнение №10
  >tcg<Name> - получение шаблона, прописанного в tcg файлах. см. Дополнение №31

  ^List - список путей файлов из которых будут взяты данные, возможны варианты:
    ^FilePath1/FilePath2/.../FilePath3 - пути файлов, прописанных через разделитель /.
    ^%WL - список полных путей выделенных файлов. см. Дополнение №7.
    ^PathList - путь к файлу со списком путей файлов.
    ^[tc] - различные списки панелей ([tc=AL]) см. Дополнение №12.
    ^различные списки ^PS<>, ^FOLDC<> ... см. Дополнение №22.
    ^$GLOBALNAME - данные, переданные глобальными переменными. см. Дополнение №23.

  -1 - данные будут взяты из буфера обмена.

  -2, -3, -4 - данные будут взяты из активного документа AkelPad:
    -2 - получить выделенное, если ничего не выделено, то весь текст.
    -3 - получить выделенное, если ничего не выделено, то ничего.
    -4 - получить весь текст.

  File - данные будут взяты из одного файла. Варианты:
    FilePath - полный путь к файлу. c:\Text.txt
    %WL - список полных путей выделенных объектов. см. Дополнение №7
    %WF - список имён выделенных объектов.

  Из различных параметров:
    GLOBALNAME - данные, переданные глобальными переменными. см. Дополнение №23
    <xfolder> - информация переданная параметром см. Дополнение №11
    <info> - информация переданная параметром см. Дополнение №10
    [tc] - различные списки панелей Total Commander ([tc=TL]) см. Дополнение №12

  Из различных параметров списков: см. Дополнение № 22
    $INI<> - информация из INI файла.
    $LISTF<> - список заданных объектов.
    $PS<> - список объектов каталога.
    $FOLDC<> - список объектов содержимого каталогов.
    $FOLDM<> - список выделенных объектов и всех объектов в подпапках.
    $LISTC<> - список объектов из выделенных без дубликатов.
    $cliplist - список полных путей объектов из буфера обмена.

  Из различных параметров диалогов: см. Дополнение № 18
    [input] - диалог ввода информации в InputBox.
    [combo] - диалог выбора информации в ComboBox.
    [group] - диалог выбора информации в GroupBox.
    [edits] - диалог выбора информации в EditBox.
    [sopen] - выбор файла для открытия.
    и др.
  #URL\\Code - исходный код html указанной URL ссылки,
    #$GLOBALNAME\\Code - исходный код html всех URL ссылок, переданных в глобальном массиве.
      (для отображения процесса можно воспользоваться параметром progres<>)
      Code [необязательный] - кодировка получаемых данных:
        1 - ANSI 1251 (по умолчанию), 2 - UTF-16 LE 1200, 3 - UTF-16 BE 1201, 4 - UTF-8
    #URL\\8 - открытие страницы в скрытом браузере IE и получение информации.
      есть возможность получать содержимое из chm файлов (ссылки вида: mk:@MSITStore:Path.chm::URL\\8)
    #TITLE\\9 - получение html кода содержимого открытого окна Explorer, CHM, ... где TITLE - заголовок или хендл окна.
    #URL\\10 - получение информации интернета с помощью объекта MSXML2.XMLHTTP.

  `File - к примеру `c:\test.htm - получение текстовой информации, относительно типа файла. см. Дополнение №37



Output - режим вывода данных (записи данных в глобальный массив GLOBALEXECT):
 -1 - разбить построчно

  1 - по умолчанию
 

 Примеры:

exect=$var_array=##$LISTF<c:\test1.txt/c:\test2.txt/c:\test3.txt>!!-1 GLOBALEXECT<$var_array>
;; пример передачи заданного списка объектов, поместив их в массив $var_array

exect=$var_array=##$PS<"%p"!!1!!0!!*.ini|*.txt*>!!-1 GLOBALEXECT<$var_array>
;; пример передачи путей файлов ini и txt в активной панели, поместив их в массив $var_array

exect=$var_array=##$FOLDC<%L!!0!!2>!!-1 GLOBALEXECT<$var_array>
;; пример передачи путей папок 1-го уровня выделенных каталогов, поместив их в массив $var_array

exect=$var_stroka=##[input=BOX1] GLOBALEXECT<a>
;; пример передачи введённых данных в диалоге input в переменную $var_stroka

exect=$var_array=##$INI<1!!%%COMMANDER_PATH%%\WinCmd.ini>!!-1 GLOBALEXECT<$var_array>
;; пример передачи всех имён секций (со скобками) файла WinCmd.ini построчно, поместив в массив $var_array

exect=$var_array=##%L!!-1 GLOBALEXECT<$var_array>
;; пример передачи списка выделенных объектов, поместив их в массив $var_array

exect=$var_array=##-1!!-1 GLOBALEXECT<$var_array>
;; пример передачи содержимого буфера обмена, построчно, поместив в массив $var_array

exect=$var_stroka=##@c:\Test\1.txt GLOBALEXECT<a>
;; пример передачи пути в переменную $var_stroka


  • Поддерживается многократное присвоение и использование параметров в одном запуске exect.
 Пример записи:

exect=$var_a1=##$PS<...>||$var_a2=##$PS<...>||$var_a3=##$PS<...> ...

 

6. Использование вспомогательных функций (UDF).
  • В команде exect могут быть задействованы вспомогательные функции.
  • UDF функции (User Defined Functions) - функции написанные пользователями Autoit для облегчения работы в скриптах.
  • Часть полезных функций будут вносится в справку по мере необходимости. (к примеру функции для работы с массивами)
  • Можно использовать только те, которые находятся в справке TCIMG.chm

7. Запись содержимого переменных в файл.
  • Для записи содержимого переменных $var_... в файл, можно воспользоваться командой asave