很多 AHK 脚本看起来像是命令不会用,实际问题经常出在文件路径、工作目录和编码上。尤其是脚本换一个文件夹就失效、FileRead 读出来乱码、FileAppend 写日志失败,这些都不是孤立问题,而是同一套文件处理基础没有搭好。
先给结论
- 读一个小文本文件:优先用
FileRead。 - 写日志、追加内容:优先用
FileAppend。 - 读写大文件、二进制文件、需要控制编码:优先用
FileOpen()。 - 保存脚本配置:优先用
IniRead、IniWrite。AHK自带的ini命令不好用,推荐:Easyini库 - 脚本随文件夹移动还要稳定:路径优先从
A_ScriptDir拼出来。 - 中文乱码:先检查脚本文件编码,再检查读取/写入时的文件编码。
最推荐的新手写法
把脚本相关文件放在脚本同目录下,然后所有路径都从 A_ScriptDir 开始拼。这样脚本放桌面、U 盘、工具目录里都不容易坏。
#Requires AutoHotkey v1.1
SetWorkingDir, %A_ScriptDir%
file := A_ScriptDir "\data.txt"
if !FileExist(file) {
FileAppend, 第一行内容`n, %file%, UTF-8
}
FileRead, text, %file%
MsgBox, % text
这里有两个关键点:第一,路径不是直接写 data.txt,而是拼成 A_ScriptDir "\data.txt";第二,写入中文内容时明确给出 UTF-8,可以少踩很多乱码坑。
FileRead 适合什么场景
FileRead 适合一次性读取文本内容,比如读取模板、读取小型数据文件、读取网页源码缓存。它的优点是简单,缺点是文件很大时会一次性读入内存。
path := A_ScriptDir "\模板.txt"
FileRead, tpl, %path%
StringReplace, tpl, tpl, {name}, 张三, All
MsgBox, % tpl
FileAppend 适合写日志
调试脚本时,不要总靠 MsgBox。日志更适合排查定时器、循环、后台自动化这类问题。
logFile := A_ScriptDir "\run.log" FormatTime, now,, yyyy-MM-dd HH:mm:ss FileAppend, [%now%] 脚本启动`n, %logFile%, UTF-8
FileOpen 什么时候更合适
当你需要逐行读取、大文件处理、二进制读写,或者更细地控制换行和编码时,FileOpen() 比 FileRead、FileAppend 更稳。
path := A_ScriptDir "\list.txt"
file := FileOpen(path, "r", "UTF-8")
while !file.AtEOF {
line := file.ReadLine()
if (line != "")
ToolTip, % line
}
file.Close()
INI 更适合保存配置
如果你只是保存窗口位置、账号开关、用户选择、路径配置,不建议自己拼文本格式。INI 对 AHK v1 来说足够简单,也方便人工修改。
ini := A_ScriptDir "\config.ini" IniWrite, C:\Users\Public\Desktop, %ini%, path, desktop IniRead, desktopPath, %ini%, path, desktop MsgBox, % desktopPath
最常见的 4 个坑
- 只写相对路径,双击能用,计划任务或管理员运行后找不到文件。
- 脚本是 ANSI,文本是 UTF-8,或者反过来,导致中文乱码。
- 写日志时忘了换行,所有内容挤成一行。
- 读取大文件还用
FileRead,导致脚本卡住。
站内延伸
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)