Тема: AHK: Параметры командной строки и оператор IF
Я тут решил использовать ком. параметры для скрипта, но столкнулся с проблемой, а именно странно работает if для %0%, %1%, %2%..... ну и т.д.
Прочитав много документации я нашёл вот такой выход
(Обязательно писать If Param0 != 1, а не If (Param0 != 1) )
#include C:\AHK\Include\PathUses.ahk
Menu, Tray, Icon, Shell32.dll, 168
Param0 = %0%
If Param0 != 1
{
msgbox % 0+16
,% "Ошибка"
,% "1. Не верно задан параметр - ПУТЬ ПОИСКА" cEscLF "2. Задано больше одного параметра" cEsc2LF "Пример запуска: fndwav.exe с:\"
,% 15
ExitApp
}
vPath = %1%
; и т.д. ..............
т.е. вариант
If %0% != 1
; или
If (%0% != 1)
работают не верно.
В справке (русской) я вычитал (Автор статьи - Androgen Belkin)
Далее, обращаю ваше особое внимание на то, что в AutoHotkey синтаксис обработки принимаемых скриптом параметров отличается от синтаксиса, принятого для других команд и операций. Я их оформил в виде примечаний, чтобы на них легче было ссылаться:
Примечание 1: в переменной 0 (а это, как ни странно - переменная) содержится количество полученных скриптом параметров.
Примечание 2: переменные 1, 2, 3 и т.д. - зарезервированные переменные, содержащие в себе получаемые скриптом параметры.
Примечание 3: для получения значения параметра используется выражение присвоения (например, Param := %2%). В правой части такого выражения обычно не должно быть знаков процента, но здесь они есть, и являются просто частью имени параметра.
Примечание 4: в справке указано, что переменные с именем в виде числа (см. Примечание 1 и 2) не могут использоваться в выражениях с операторами (такими как, например, OR, AND, NOT). Но я обнаружил, что могут, но с "наоборотным" синтаксисом. Например, обычно пишут так:
If ( param1 = "orange" AND param2 = "apple" )а в случае с принимаемыми параметрами, я пишу так:
If ( %1% = orange AND %2% = apple )
т.е. важно было Примечание 4 и вот ещё
Возможно, это просто глюк AutoHotkey, а может где-то в справке так и написано, просто я не нашел, а может и вовсе я что-то не так понял. Однако в таком виде все работает. Альтернативой указанному использованию параметров в выражениях является присвоение содержимого "числовых" переменных, обычной "буквенной" переменной, и использование в выражениях уже этой переменной. Так получится чуть длиннее, но зато сохранится привычный синтаксис.
так просвяти как правильно обрабатывать параметры командой строки, что бы быть уверенным что всё сработает.
Если %1% содержит что то типа Сашка_привет, всё нормально, а если он содержит C: или С:\ то ошибка.
AHK ругается на ":" или "\" или "/" на остальные символы я не стал проверять, но ругается если написать vPath := %1%, а не vPath = %1%
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019 Click to Download