文章目录
- 路径操作
- 文件选择
- 文件读写
- 文件属性
 
AHK作为一种脚本语言,其功能特点是对操作系统功能的整合与简化,从而缩减操作流程,从而起到提高效率的目的。鼠标、键盘的映射,相当于是对外设操作的简化,而除了外部交互之外,操作文件则是一项十分频繁的任务,所以在AHK中提供了诸多路径操作函数。
路径操作
AHK支持文件夹和文件的复制、移动、删除等操作,具体如下
| 操作 | 文件夹 | 文件 | 
|---|---|---|
| 复制 | DirCopy | FileCopy | 
| 移动 | DirMove | FileMove | 
| 删除 | DirDelete | FileDelete | 
| 判存 | DirExist | FileExist | 
| 创建 | DirCreate | 
此外,还有SetWorkingDir可以更改脚本当前的工作目录。
其中,复制、移动操作至少需要两个输入参数,即源文件(夹)和目标文件(夹)。移动和判存函数则至少只需要一个输入路径。
此外,在删除文件夹时,会有一个布尔类型的可选参数Recurse,默认为false,表示若文件夹不为空,则不进行操作并抛出异常;如果设为true,则
在复制和移动操作时,会有一个可选参数Overwrite,默认为false,表示不覆盖现有项目,否则对现有内容进行覆盖。
下面举一个例子
CapsLock::{
    DirCreate "test"
    if DirExist("test")
    	Msgbox "test存在"
}
执行脚本后,点击CapsLock,则会在脚本所在路径创建一个名为test的文件夹,并弹出test存在的提示框。如果在创建文件夹之前,使用SetWorkingDir函数更改工作目录,则test文件夹会创建到相应的路径下。
文件选择
AHK提供了两个非常便捷的GUI工具,用来选择文件或文件夹,分别是DirSelect和FileSelect,其调用接口分别为
slctFolder := DirSelect(StartingFolder, Options, Prompt)
slctFile := FileSelect(Options, RootDir\Filename, Title, Filter)
各参数含义如下
- StartingFolder起始路径
- RootDir\Filename起始路径及默认文件名
- Prompt;- Title对话框的操作文本
- Filter文件过滤器
DirSelect和FileSelect的Options含义不同,在文件夹对话框中,其可选参数及其含义为
在文件对话框中,其可选参数及其含义为
- D 允许用户选择文件夹,这种情况下Filter必须省略
- M 支持多选
- S 为文件保存对话框
文件读写
AHK可以创建、写入、读取文件,与此相关的函数有
| 函数 | 说明 | 
|---|---|
| FileOpen | 打开文件 | 
| FileEncoding | 设置默认编码 | 
| FileAppend | 内容追加 | 
| FileRead | 读取文件 | 
下面做一个简单的脚本来演示一下这几个函数的功能
CapsLock::{
    fileAppend "autohotkey", "test.txt"
    MsgBox fileRead("test.txt")
}
执行脚本后,点击CapsLock,就会创建一个文本文件test.txt,内容为autohotkey,同时弹出消息框,内容也是autohotkey。
和大多数编程语言不同,AHK并没有提供类似FileWrite这样直接覆盖旧文件然后写入的函数,如果想实现类似功能,可以先将原来的文件删除。
此外,FileAppend, FileRead这两个函数都有可选参数Encoding,用于声明文件编码,缺省时采用默认编码。FileEncoding函数可设置默认编码。
文件属性
AHK封装了一些获取和设置文件属性的函数,
| 类别 | 设置 | 获取 | 
|---|---|---|
| 文件类别 | FileSetAttrib | FileGetAttrib | 
| 时间戳 | FileSetTime | FileGetTime | 
| 文件字节数 | FileGetSize | |
| 版本 | FileGetVersion | 
其中,Attrib表示文件类别,在Windows中有如下几类
| R | A | S | H | N | O | T | 
|---|---|---|---|---|---|---|
| 只读 | 存档 | 系统 | 隐藏 | 普通 | 离线 | 临时 | 
而文件时间则包括三类,通过WhichTime参数调控,其中M表示修改时间;C表示创建时间;A表示上次访问时间。
CapsLock::{
    MsgBox FileGetTime("test.txt", "M")
}
执行结果为




















