如何使用 AutoHotKey 执行多项操作

How to do multiple actions with AutoHotKey

我之前没有使用过 AHK,所以这可能是一个印刷错误,但希望得到任何帮助。我尝试单击文件资源管理器上的搜索栏,搜索短语 .pdf,然后搜索 select 所有文件。然后我想单击后退按钮,这样我就可以转到父文件夹,然后粘贴文件。最后,我想单击主页,然后单击顶部的文件夹并将其删除。这样做的目的是把子文件夹里的所有PDF都拿出来放到主文件夹里,然后把子文件夹删掉。

我试过了。

^e::
Click 3510,201
Send, *.pdf*{Enter} ^a ^x
Click 2601,200
^v
Send {Home}
Click 2896,266
Send {Delete}
Return

目前,当我尝试时,它会删除我文件夹中的所有文件。

您的代码似乎存在一些问题,解决每个问题可能会使您的代码正常工作,但我建议采用不同的、更可靠的方法。

尝试使用 file-loop 查找某个位置(和 sub-locations)中具有 PDF 扩展名的所有文件,并 FileMove 将这些文件移动到您想要的位置。

https://www.autohotkey.com/docs/commands/LoopFile.htm
https://www.autohotkey.com/docs/commands/FileMove.htm

编辑 (根据评论)
有几种方法可以从文件资源管理器中获取路径。我能想到的最简单的方法是发送 ^{f4} 它将 select 完整路径,从那里你可以发送 ^c 将其复制到剪贴板并将其用于 file-loop 路径。

Edit2 (工作示例)

f1::
WinGetClass , vClass , A
If !(vClass = "CabinetWClass") ; Stops here if file explorer isn't the active window
    Return
clipboard := ""
Send , ^{f4}{esc}^c
ClipWait , 1
If ErrorLevel ; Stops here if nothing was copied
    Return
Loop , Files , % clipboard . "\*.pdf" , R
    FileMove , %A_LoopFileLongPath% , %clipboard%
Return

请注意,对于“文档”、“下载”或“此电脑”等命名位置,这将失败;它必须是完整的工作路径。此外,这不会删除子文件夹,但请参阅 FileRemoveDir寻求帮助。
https://www.autohotkey.com/docs/commands/FileRemoveDir.htm

Edit3 (使用FileRemoveDir删除空文件夹)
此代码段将删除空文件夹,从最深的级别开始,一直到顶层。 SKAN from the original AHK forums.

我对此不以为然
SetBatchLines -1
FileSelectFolder, Folder, , % (Del:=0), Purge Empty Folders
If ( ErrorLevel Or Folder="" )
  Return
Loop, %Folder%\*, 2, 1
  FL .= ((FL<>"") ? "`n" : "" ) A_LoopFileFullPath
Sort, FL, R D`n ; Arrange folder-paths inside-out
Loop, Parse, FL, `n
{
  FileRemoveDir, %A_LoopField% ; Do not remove the folder unless is  empty
  If ! ErrorLevel
       Del := Del+1,  RFL .= ((RFL<>"") ? "`n" : "" ) A_LoopField
}
MsgBox, 64, Empty Folders Purged : %Del%, %RFL%

这可以适应 Edit2 中的示例,您应该可以开始了!