Расширение переменных в строке 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

Спасибо guest3456 за помощь.

Вы перепутали '=' и ': ='.

Сказать "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
}
Другие вопросы по тегам