文件的条件包含

Conditional include of file

我只想包含某些存在的脚本。不幸的是 #include 在执行之前被处理了,所以我不能像这样让它成为条件:

If FileExists(@ScriptDir & "\common.au3") Then
   #include "common.au3"
EndIf

我尝试使用 Execute 通过 Execute(ReadFile(...)) 评估读取的文件。但这似乎只处理单个语句——例如我不能声明多个函数。

有条件地包含另一个文件的不同方法吗?

可能不是一个好的设计选择,但如果您真的需要这样做,请尝试#OnAutoItStartRegister:

#OnAutoItStartRegister "_OnAutoItStart_CreateIncludes"
#include "include_collection.au3"


If IsDeclared("iExample_Common") Then
    MsgBox(64, "", "Common.au3 exists")
Else
    MsgBox(16, "", "Common.au3 wasnt included")
EndIf

MsgBox(0, "", "Your Script here")




Func _OnAutoItStart_CreateIncludes()
    If StringInStr($CmdLineRaw, '-_OnAutoItStart_CreateIncludes', 1) Then Return


    If FileExists(@ScriptDir & "\common.au3") And Not StringInStr(FileRead("include_collection.au3"), '#include "common.au3"') Then
        FileWrite("include_collection.au3", '#include "common.au3"')
    EndIf


    $iPID = Run('"' & @AutoItExe & '" ' & $CmdLineRaw & ' -_OnAutoItStart_CreateIncludes', @WorkingDir, Default, 2)
    While ProcessExists($iPID)
        ConsoleWrite(StdoutRead($iPID))
        Sleep(10)
    WEnd
    Exit
EndFunc   ;==>_OnAutoItStart_CreateIncludes

另外创建一个空文件“include_collection.au3”。 在此示例中,我创建了包含语句“$iExample_commons = 1234'.

的“commons.au3”

注意:以这种方式包含文件后,不应将其删除,否则您的脚本将再次失败。这可能也可以克服,但在某些时候它会变得非常混乱。

也许在您的应用程序周围包裹一个启动器是一个更好的主意,它将 add/remove 根据需要在启动前包含行。