文章目录
- 路径操作
- 文件选择
- 文件读写
- 文件属性
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")
}
执行结果为