1 (изменено: Indomito, 2012-04-24 16:35:35)

Тема: 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

2

Re: AHK: Параметры командной строки и оператор IF

If %0%
{
    args := []
    Loop %0%
       args[A_Index] := %A_Index%
}
; ниже — для понимания.

For i, arg in args
    o .= "arg[" i "] = " arg "`n"
MsgBox % o
If o
    Exitapp
Run %A_ScriptFullPath% 123 345 678

3

Re: AHK: Параметры командной строки и оператор IF

Спасибо, код понятен без ; ниже — для понимания., но так и остался вопрос про if (%0%) - так же не сработает верно?

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

4

Re: AHK: Параметры командной строки и оператор IF

Не надо путать содержимое переменной и содержимое переменной, чье имя содержится в указанной тобой переменной (это как раз случай (%0%) )
Для понимания-2:

a = b
b = 1
if a
MsgBox % "a  = " a ; работает
if (a)
MsgBox % a " = " %a% ; работает
if (%a%)
MsgBox % a " = " %a% ; работает
b = 0
if (%a%)
MsgBox % a " = " %a% ; не работает

5

Re: AHK: Параметры командной строки и оператор IF

Уговорили
Вопрос решён.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download