扩展 AHK 字符串中的变量?

Expanding variables in an AHK string?

我一直在试图找出如何扩展 AutoHotkey 字符串中的任何变量。在我的具体情况下,我从文件中读取一行并 运行 它。该行可能包含一个或多个变量引用,在传递给 Run.

之前需要对其进行扩展

这里有几个测试(不起作用):

Foo:="%A_MyDocuments%\blah.txt"
Bar=%Foo%
MsgBox %Bar%

a=1
b:="%a%+1=2"
MsgBox % b

我过去两个小时都在搜索文档和 Internet,但没有发现任何有用的东西。有几次千钧一发,但没有一个符合这种情况。

你把‘=’和‘:=’搞混了。

说“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%

Variable assignment 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
}

原来有一个内置函数可以做到这一点。 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 for the help