扩展 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
我一直在试图找出如何扩展 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