在AHK字符串中扩展变量?

时间:2016-04-28 01:43:37

标签: string autohotkey dereference variable-expansion

我一直试图弄清楚如何扩展AutoHotkey字符串中的任何变量。在我的具体情况下,我从文件中读取一行并运行它。该行可能包含一个或多个变量引用,这些引用在传递给Foo:="%A_MyDocuments%\blah.txt" Bar=%Foo% MsgBox %Bar% a=1 b:="%a%+1=2" MsgBox % b 之前需要进行扩展。

这是一些测试(不起作用):

 CREATE OR REPLACE VIEW VW_INVOICES
 AS
 SELECT INVOICE_LINE_ITEM.INVOICE_ID, INVOICE.SALESPERSON_ID,
 SALESPERSON.SALESPERSON_NAME, SALESPERSON.COMMISSION,
 INVENTORY.ITEM_NUM, INVENTORY.INV_QUANTITY,
 INVOICE.CUSTOMER_ID, CUSTOMER.CUSTOMER_BALANCE
 FROM INVOICE_LINE_ITEM, INVOICE, SALESPERSON, INVENTORY, CUSTOMER
 JOIN INVOICE ON INVOICE.INVOICE_ID = INVOICE_LINE_ITEM.INVOICE_ID
 JOIN SALESPERSON ON SALESPERSON.SALESPERSON_ID = INVOICE.SALESPERSON_ID
 JOIN INVOICE ON INVOICE.ITEM_NUM = INVENTORY.ITEM_NUM
 JOIN CUSTOMER ON CUSTOMER.CUSTOMER_ID = INVOICE.CUSTOMER_ID;
 JOIN INVOICE ON INVOICE.INVOICE_ID = INVOICE_LINE_ITEM.INVOICE_ID

我花了两个小时搜索文档和互联网,发现没有任何效果。有几个近距离通话,但没有任何匹配这种情况。

3 个答案:

答案 0 :(得分:0)

你有一些'='和':='混淆了。

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

答案 1 :(得分:0)

没有本地方式这样做。我看到两个选择。 使用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
}

答案 2 :(得分:0)

事实证明,有一个内置功能可以做到这一点。 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 the help