# #Include / #IncludeAgain

使脚本表现得好像指定文件的内容就出现在这个位置。

#Include FileOrDirName
#IncludeAgain FileOrDirName

#### 参数

FileOrDirName | File: 要包含的文件名称，如果未指定绝对路径，它将假设在启动/工作目录(除了 ahk2exe, 它会假设文件在脚本自己的目录)。文件名称不能包含变量引用(除了 %A_ScriptDir%, %A_AppData% 和 %A_AppDataCommon%)、双引号或者通配符。转义顺序除了分号 (`;) 外都不能被使用，它们也不需要，因为字符比如百分号是原义对待的。注意：SetWorkingDir 对 #Include 不起作用，因为 #Include 在脚本开始执行之前就已做处理。 Directory: 指定一个目录而不是文件从而改变后面出现的所有 #Include 和 FileInstall 使用的工作目录。目录名称不能包含变量，除了 %A_ScriptDir%, %A_AppData% 和 %A_AppDataCommon%。注意：以这种方式改变工作目录不会影响脚本开始运行时的初始工作目录(A_WorkingDir)。要改变那个初始工作目录，请在脚本的顶部使用 SetWorkingDir。

#### 注意

脚本表现得好像被包含的文件内容就在 #Include 指令的位置出现(就好像从包含的文件里复制粘贴过来一样)。因此，它通常不能将两个孤立的脚本合并成一个可运作的脚本(要实现的话，请看 www.autohotkey.com/forum/topic18545.html)。

#Include 会确保 FileName 仅被包含一次，即使它遇到多次重复的包含。相比之下，#IncludeAgain 则允许同个文件的多次包含，而在所有其他的方面和 #Include 一样。

可以在 FileName 参数前放置 *i 和单个空格，这样会使程序在加载被包含文件时忽略任何产生的故障。例如: #Include *i SpecialOptions.ahk。这个选项应该仅在被包含文件的内容对主脚本的操作是可有可无的情况下才去使用。

通过 ListLines 或者菜单 View->Lines 显示在主窗口里的那些行总是按照它们在文件内部的物理顺序编号的。换句话说，包含一个新的文件将仅仅改变主脚本文件的一行编号，就是 #Include 这行(除了已编译的脚本，它会在编译时把它们包含的文件合并为一个大的脚本)。

#Include 常用来加载在一个外部文件里定义的函数。和子程序标签不同，函数可以被包含在脚本的最顶部而不影响自动执行部分。

和其他 # 开头的指令一样，#Include 不能被有条件地执行。换句话说，下例不起作用：

    if x = 1
        #Include SomeFile.ahk  ;不管 x 的值是什么，这行都会生效。
        y = 2  ;而此行是属于上面的 IF 语句的，因为 # 开头的指令不属于 IF 语句。

按函数名称在一个函数库里调用，可以自动地将文件包含进来(也就是不需要使用 #Include)。

#### 相关命令

Libraries of Functions, Functions, FileInstall

#### 示例

    #Include C:\My Documents\Scripts\Utility Subroutines.ahk
    #Include %A_ScriptDir%  ;为下面的 #Include 和 FileInstall 改变工作目录。
    #Include C:\My Scripts  ;同上，不过换成了一个明确命名的目录。

翻译：天堂之门 menk33@163.com 2008年11月6日