【发布时间】:2014-12-07 04:06:41
【问题描述】:
我有一份工作,我想将它分配给 AHK,让我每隔 5 分钟运行一次。 它需要检查一个 txt 文件的内容,比如说 c:\test.txt。 该文件可以包含任意数量的行,格式为:
prog 1
prog 2
prog 3
...
prog N
在包含其他文本的行中。
我的目的是告诉 AHK 在 prog 之后的最后一行的数字,这是列表中最大的数字,因为这些行在此文件中以数字顺序出现。
我的宏伟想法是检查从“prog 1”到“prog N”的行是否存在,其中 N 是 20 以下的数字,使用 cmd 窗口上的一系列查找命令,获取错误级别,当错误级别点击 1,我会将我想要的变量设置为循环索引的值减 1,因为它是最后一次成功运行的 find 命令,因此
i=1
loop 20
{
type c:\users\me\test.txt | find "prog "%i%
if %errorlevel% != 0
{
num := i-1
; exit the loop in some way here
}
else
{
i := i+1
}
} ; end loop
此时,我感兴趣的只是存储在变量 %num% 中的值。我知道这可能不是完成此任务的最优雅的解决方案,但如果每天在闲置的笔记本电脑上运行几次,我可以承担性能损失。
到目前为止,我一直停留在这个想法的最基本组成部分:find 命令并将它生成的错误级别传递回 AHK
这是我的代码:(此代码仅用于测试 find 命令,我从 AHK 论坛获得)
Run %COMSPEC% /K type c:\users\me\test.txt | find "prog 4", , max
msgbox %ErrorLevel%
return
当这段代码运行时,无论“prog 4”行是否存在,消息框总是显示值“0”。
当我将命令 Run 替换为 RunWait 时,errorlevel 会按预期显示,但在这种情况下,我的自动化过程会出现故障:期望手动关闭 cmd 提示符,我假设它具有 *feature"命令 RunWait 的等待部分。
我怎样才能克服这个障碍?我愿意将整个功能加载到 dos 批处理文件并在最后从批处理文件中获取数字输出,但我开始意识到,使用 AHK 编程比 DOS 批处理编程更容易执行和理解。所以,我的偏好是在 AHK 脚本方面。
谢谢
【问题讨论】:
标签: windows cmd autohotkey