我以前没有使用过AHK,所以它可能是印刷错误,但希望得到帮助。我试图单击“文件资源管理器”上的搜索栏,搜索词组 .pdf ,然后选择所有文件。然后,我想单击“后退”按钮,以便可以转到父文件夹,然后粘贴文件。最后,我要单击主页,然后单击顶部的文件夹并将其删除。所有这些操作的目的是将所有PDF从子文件夹中取出,并将它们放入主文件夹中,然后删除子文件夹。
我已经尝试过了。
^e::
Click 3510,201
Send, *.pdf*{Enter} ^a ^x
Click 2601,200
^v
Send {Home}
Click 2896,266
Send {Delete}
Return
当前,当我尝试时,它会删除文件夹中的所有文件。
答案 0 :(得分:2)
您的代码似乎存在一些问题,解决每个问题可能会使您的代码正常工作,但我建议采用另一种更健壮的方法。
尝试使用文件循环在PDF扩展名和FileMove
的位置(和子位置)中查找所有文件。
https://www.autohotkey.com/docs/commands/LoopFile.htm
https://www.autohotkey.com/docs/commands/FileMove.htm
编辑 (每条评论)
有几种方法可以从文件资源管理器中获取路径。我能想到的最简单的方法是发送一个^{f4}
,它将选择完整路径,从那里您可以将^c
复制到剪贴板,并将其用作文件循环路径。
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
请注意,这对于诸如“文档”,“下载”或“此PC”之类的命名位置将失败;它必须是完整的工作路径。而且,这不会删除子文件夹,但请参见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中的示例,您应该一切顺利!