# #Include / #IncludeAgain

使脚本的行为与指定文件的内容位于此确切位置一样.

    #Include FileOrDirName
    #Include <LibName>
    #IncludeAgain FileOrDirName

## 参数

FileOrDirName

  类型: 字符串

  文件或目录的路径, 如下所述. 不能 包含双引号(除了参数周围的一对可选的双引号之外), 通配符或转义序列(分号 `; 除外).

  内置变量以通过将其括在百分号中来使用(例如, `#Include "%A_ScriptDir%"`). 不属于有效变量引用的百分号按原义解释. 所有内置变量都是有效的, 除了 A_Args 和内置类.

  已知限制: 编译脚本时, 变量由编译器计算, 并且可能与脚本最终执行时返回的值不同. 编译器支持以下变量: A_AhkPath, A_AppData, A_AppDataCommon, A_ComputerName, A_ComSpec, A_Desktop, A_DesktopCommon, A_IsCompiled, A_LineFile, A_MyDocuments, A_ProgramFiles, A_Programs, A_ProgramsCommon, A_ScriptDir, A_ScriptFullPath, A_ScriptName, A_Space, A_StartMenu, A_StartMenuCommon, A_Startup, A_StartupCommon, A_Tab, A_Temp, A_UserName, A_WinDir.

  File: 要包含的文件的名称. 默认情况下, 相对路径是相对于包含 #Include 指令的文件目录的. 这个默认值可以通过使用下面描述的 `#Include Dir` 来覆盖. 注意: SetWorkingDir 对 #Include 没有效果, 因为 #Include 是在脚本开始执行之前处理的.

  Directory: 指定目录而不是文件, 以更改当前文件中所有后续出现的 #Include 和 FileInstall 所使用的工作目录. 注意: 以这种方式更改工作目录不会影响脚本开始运行时的初始工作目录(A_WorkingDir). 要改变这一点, 请在脚本的顶部使用 SetWorkingDir.

  注意: 这个参数不是一个表达式, 但可以用引号括起来(可以是 '单引号' 或 "双引号").

LibName

  类型: 字符串

  库文件或函数的名称. 例如, `#include <lib>` 和 `#include <lib_func>` 都会包含某个库文件夹中的 lib.ahk. LibName 不能包含变量引用.

## 备注

脚本表现得好像包含文件的内容实际出现在 #Include 指令的准确位置(就好像从包含的文件中复制粘贴过来一样). 因此, 它通常不能把两个孤立的脚本合并成一个可运行的脚本.

#Include 仅确保包含 FileName 一次, 即使遇到多次重复的包含也是如此. 与之相比, #IncludeAgain 允许同一文件的多次包含, 而在所有其他方面与 #Include 相同.

可以在 FileName 参数前加上 `*i` 和单个空格, 这会使程序忽略读取包含文件的任何失败. 例如: `#Include "*i SpecialOptions.ahk"`. 此选项应该仅在包含的文件的内容对主脚本的操作可有可无的情况下才使用.

通过 ListLines 或菜单 View->Lines 在主窗口显示的行总是按照它们在自己的文件中的物理顺序进行编号的. 换句话说, 包含一个新文件将只改变主脚本文件那一行的编号, 即 #Include 行本身的行号(编译后的脚本除外, 它会在编译时把它们包含的文件合并成一个大的脚本).

#Include 常用来加载在外部文件中定义的函数.

和其他指令一样, 不能根据条件执行 #Include. 换句话说, 这个例子不会像预期的那样工作:

    if (x = 1)
        #Include "SomeFile.ahk"  ; 不管 x 的值是什么此行都会执行.

通过名称来调用库函数, 可以自动包含文件(即不需要使用 #Include).

## 相关

脚本库文件夹, 函数, FileInstall

## 示例

将指定文件的内容包含到当前脚本中.

    #Include "C:\My Documents\Scripts\Utility Subroutines.ahk"

改变后续 #Includes 和 FileInstalls 的工作目录.

    #Include "%A_ScriptDir%"

和上面一样, 但是使用显示命名的目录.

    #Include "C:\My Scripts"

dftg