2016-04-28 12 views
0

私は、AutoHotkey文字列内の変数をどのように展開するのか把握しようとしていません。具体的には、ファイルから行を読み込んで実行します。行には、1つまたは複数の変数参照が含まれていて、Runに渡される前に展開する必要があります。AHK文字列の変数を展開していますか?

はここで(動作しない)テストのカップルです:

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

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

私は、ドキュメントやインターネットを精練、過去2時間を過ごしたと働いていた何も見つかりませんでした。いくつかのクローズコールがありましたが、このシナリオに一致するものはありません。

+1

最初の例の文字列には変数名が含まれていません。私は第2の例が何であるかを理解していない。実行コマンドはどこにありますか?どのように使用されますか? – 2501

+1

何が問題なのですか?何が問題なのですか?どのようなエラーがありますか? .... – Blauhirn

+0

AHK https://en.wikipedia.org/wiki/Evalで 'eval'の機能を探していると思います。インターネット上にあるAutoHotkeyの実装があります。それ以外の簡単な方法は考えられません。 – Blauhirn

答えて

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 

をあなたにthe helpためguest3456をありがとうございます。

0

'='と ':='が混乱しています。

「B:=%は%+ 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/

+0

私は式と非式の構文に精通しています。私が質問したように、私はファイルから文字列を読み込んでいるので、あなたの例はうまくいきません。 – Synetech

+0

ファイルから何を読み込んでいるのか、それをどのように読んでいるのかを指定していないので、元の応答に影響する可能性があります。あなただけが立ち往生して、「変数を展開しよう」としているだけです。 "1 + 1 = 2"を示す文字列として%a%+ 1 = 2の出力を持つのは意味がありません。なぜなら、 'A'が常に '1'に等しくなければ、応答として無効になるからです。それについては気にしない。答え: "Foo =%A_MyDocuments%。 "\ blah.txt" "が機能し、 'Msgbox%Foo'の行に 'c:\ users \ foo \ documents \ blah.txt'と表示されます。おそらくあなたのアプローチはコードではなくちょっとしたものだったと私は示唆していました。 –

+0

私は混乱がどこにあるのか分かりません。非常に最初の2つの行は '私はファイルから行を読みました...行には展開する必要がある変数が含まれている可能性があります'と言いました。それはまっすぐな質問のようです。この例で ':='を使用して、変数に展開されていない変数が実際に含まれていることを確認しました。ファイルからの読み込みは同じ効果を持ちます。 – Synetech

0

これを行うためのネイティブな方法はありません。私は2つのオプションを参照してください。 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 
} 
+0

'exp:' OP: ''%a% "' – Blauhirn

+1

Trueのような非標準変数が含まれている場合、これは機能しません。しかし、 "文字列"はファイルから来ているので、この文字列で使用できる一連の変数があり、これらの変数は一時的なahk.exeインスタンスに渡すことができると仮定します。 – Forivin

+0

ListVarsの出力とそのすべてを解析することもできます。 – Forivin

関連する問題