0

我有一个 autoit 脚本,它基本上复制第一行文本,然后将其再次粘贴到同一行中。我想一遍又一遍地这样做,直到文档结束。有什么建议么?

Run("notepad.exe filename.txt")
WinWaitActive("Untitled - Notepad")
Send("+{END}")
Send("^C")
Sleep (1000)
Send("{END}")
Sleep (1000)
Send(" ")
Send("^V")
Send("{HOME}")
Send("{DOWN}")
4

1 回答 1

1

您可以使用以下代码:

$filename = "filename.txt"

Run("notepad.exe " & $filename)
WinWaitActive($filename & " - Notepad")

$lines= StringRegExp(FileRead($filename), @CR, 3)
$count = UBound($lines)

For $i = 0 To $count
    Send("+{END}")
    Send("^C")
    Sleep (1000)
    Send("{END}")
    Sleep (1000)
    Send(" ")
    Send("^V")
    Send("{HOME}")
    Send("{DOWN}")
Next

您必须等待标题中包含文件名的窗口。如果文件名内部有空格,则需要在 notepad.exe 后面的参数两边加上引号。

不知何故,您需要获取行号的计数。我只是用 AutoIt 阅读了整个文件并搜索“回车”。结果数组具有行号的大小。然后在 For-...-To-...-Loop 中使用该数字。

您可以将睡眠时间减少到 100 毫秒。而且使用 FileReadLine 和可能的 FileWriteLine 来完成您的任务会容易得多,因为 FileReadLine 可以一直使用到文件末尾。它将@error 设置为-1。有关更多信息,请参阅文档

于 2013-01-11T12:57:19.073 回答