扩展AHK字符串中的变量



我一直在想如何扩展AutoHotkey字符串中的任何变量。在我的特定情况下,我从文件中读取一行并运行它。该行可能包含一个或多个变量引用,在传递给Run之前需要对其进行扩展。

以下是几个测试(不起作用):

Foo:="%A_MyDocuments%blah.txt"
Bar=%Foo%
MsgBox %Bar%
a=1
b:="%a%+1=2"
MsgBox % b

在过去的两个小时里,我搜索了文档和互联网,没有发现任何有效的方法。有几次千钧一发,但没有什么能与这种情况相匹配。

事实证明,有一个内置函数可以做到这一点。Transform命令可以很容易地扩展变量:

Foo:="%A_MyDocuments%blah.txt"
Bar=%Foo%
Transform, Bar, Deref, %Bar%
MsgBox %Bar% ; Displays something like C:UsersFoobarDocumentsblah.txt
a=1
b:="%a%+1=2"
Transform, b, Deref, %b%
MsgBox % b ; Displays 1+1=2

谢谢客人3456的帮助。

您混淆了一些'='和':='。

说"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
}

最新更新