Расширение переменных в строке AHK?
Я застрял, пытаясь выяснить, как расширить любые переменные в строке AutoHotkey. В моем конкретном случае я читаю строку из файла и запускаю ее. Строка может содержать одну или несколько ссылок на переменные, которые необходимо расширить перед передачей в Run
,
Вот пара тестов (которые не работают):
Foo:="%A_MyDocuments%\blah.txt"
Bar=%Foo%
MsgBox %Bar%
a=1
b:="%a%+1=2"
MsgBox % b
Я провел последние два часа, просматривая документы и Интернет, и не нашел ничего, что сработало. Было несколько звонков, но ничего не соответствовало этому сценарию.
3 ответа
Оказывается, есть встроенная функция, которая может сделать это. Transform
Команда может легко раскрывать переменные:
Foo:="%A_MyDocuments%\blah.txt"
Bar=%Foo%
Transform, Bar, Deref, %Bar%
MsgBox %Bar% ; Displays something like C:\Users\Foobar\Documents\blah.txt
a=1
b:="%a%+1=2"
Transform, b, Deref, %b%
MsgBox % b ; Displays 1+1=2
Вы перепутали '=' и ': ='.
Сказать "B:=%A%+1=2" - это строка, и вы пытаетесь "установить" ответ на 2 в строке вместо вычисления?
Должно быть что-то вроде:
A = 1
B := A + 1
Msgbox, % B
Or
A = 1
B = %A% + 1
Msgbox, % B
Or
Foo = %A_MyDocuments% . “\blah.txt”
Bar := Foo
Msxbox, %Bar%
Присвоение переменной https://autohotkey.com/board/topic/97097-faq-variables-dynamic-variables-literal-strings-and-stuff-like-that/
Нет родного способа сделать это. Я вижу два варианта. Используйте AutoHotkey.dll для оценки вашего выражения или запустите другой экземпляр AutoHotkey.exe для вашей работы.
Например:
Foo:="%A_MyDocuments%\blah.txt"
Bar := Eval(Foo)
MsgBox %Bar%
Eval(exp) {
Static tempScript := A_ScriptDir "\tmp_eval.ahk"
Static tempOutput := A_ScriptDir "\tmp_eval_out.txt"
FileDelete, %tempScript%
FileDelete, %tempOutput%
FileAppend, % "FileAppend, " exp ", " tempOutput , %tempScript%
RunWait, %A_AhkPath% "%tempScript%"
FileRead, output, %tempOutput%
FileDelete, %tempScript%
FileDelete, %tempOutput%
Return output
}