[AHK] 快速鍵搜尋檔案 Everything

by Mesak

最近電腦硬碟一直滿滿的紅條,堆了很多不常用的檔案 。想逐一清理之後發現,電腦佔用最空間的檔案,就是影片了。

有一些影片蒐藏也不需要太高的畫質,所以決定把電腦裡面的某些影片給轉檔縮小了。

影片檔案壓小之後遇到一些繁複的電腦操作,為了解決這些麻煩的步驟,原本我使用了  X-Mouse 來定義我滑鼠的快速鍵,按下之後呼叫 Everything 來搜尋檔案位置,但是畢竟只是簡單的工具,要寫一長串的判斷還是有點困難。

想了半天,還是找到以前用過的工具,AutoHotKey 目前安裝的版本是 v1.1.22.05 也許程式有點不同,不過參考一下說明文檔應該能解決的。

AutoHotKey 下列簡稱 ahk ,ahk 其實很簡單啟用,只需要文件檔副檔名儲存成 .ahk 文件,就可以執行,如果使用 Emeditor 可以使用套用一下語法顏色。

EverythingPath = %A_ProgramFiles%\Everything\Everything.exe ;specify the path here
F3::
	Send, ^c
	ClipWait,1
	sConvVideoPath := ClipBoard
	SplitPath, sConvVideoPath, name, dir, ext, name_no_ext, drive
	;MsgBox % name_no_ext
	sConvVideoDir := dir
	sConvVideoFileName := name_no_ext
	run, %EverythingPath% -search "folder:%sConvVideoFileName%"
return
#IfWinActive ahk_exe Everything.exe
F3::
	Send, ^g
	Send, {Home}
	Send, {F2}
	Send, ^c
	sSourVideoDirName := ClipBoard
	Send, {ESC}
	Send, ^+c
	sSourVideoDir := ClipBoard
	Send, ^w
	ClipWait,1
	StringReplace, sSourVideoDir, sSourVideoDir, `", , All
	FileMoveDir, %sSourVideoDir%, %sConvVideoDir%\%sSourVideoDirName% ;
	FileMove, %sConvVideoPath%, %sConvVideoDir%\%sSourVideoDirName% ,1
return

為了怕自己之後要用忘記這邊詳解一下語法
第一行 指定 Everything 的檔案位置 EverythingPath

第二行指定快速鍵為 F3
Send, ^c
送出複製的快速鍵 Ctrl + C (參閱 Send
這邊的重點是,把選擇的檔案,直接做一個複製的動作
ClipWait,1
等一下
sConvVideoPath := ClipBoard
指定剪貼簿的資料給一個變數名稱 sConvVideoPath 這個名稱的解釋為 s(字串)Conv(轉檔)VideoPath(影片位置)
SplitPath, sConvVideoPath, name, dir, ext, name_no_ext, drive
取得路徑的資料 (參閱 SplitPath
sConvVideoDir := dir
保存 轉檔的資料夾位置
sConvVideoFileName := name_no_ext
保存 轉檔的名稱,不加上副檔名
run, %EverythingPath% -search "folder:%sConvVideoFileName%"
呼叫 Everything 應用程式,並且用命令列搜尋 轉檔的名稱 資料夾
(通常我的動作片都是用番號+說明當資料夾名稱,番號當檔名,這部分都是使用 EverAver Renamer 處理)
#IfWinActive ahk_exe Everything.exe
這段是偵測目前使用的視窗程式是否為 Everthing (參閱 IfWinActive
F3::
改變 F3 快速鍵的內容
Send, ^g
送出 Ctrl+G 的按鈕,這邊就需要 Everything 的配合,初始搜尋的結果,游標都會在搜尋編輯框內,可以在 Everything 內設定快速鍵將焦點移動到搜尋結果框
Send, {Home}
移動到第一個結果,依造我的搜尋習慣第一個應該都是目標的資料夾
Send, {F2}
因為資料夾檔名內容搜尋不到,所以直接送快速鍵 F2 編輯資料夾名稱
Send, ^c
接著複製資料夾名稱
sSourVideoDirName := ClipBoard
把原始資料夾名稱給暫存 sSourVideoDirName
Send, {ESC}
取消動作,把編輯資料夾的動作取消
Send, ^+c
透過 Everything 內建快速鍵 Ctrl + Shift + C 複製資料夾完整路徑
sSourVideoDir := ClipBoard
把原始資料夾路徑暫存 sSourVideoDir
Send, ^w
送出 Ctrl+W 關閉 Everything 視窗
ClipWait,1
等一下
StringReplace, sSourVideoDir, sSourVideoDir, `", , All
因為複製的資料有雙引號,這個參數可以去掉雙引號,避免後面出錯 (參閱 StringReplace
FileMoveDir, %sSourVideoDir%, %sConvVideoDir%\%sSourVideoDirName% ;
移動原始資料夾到轉檔好的檔案資料夾下 (參閱 FileMoveDir
FileMove, %sConvVideoPath%, %sConvVideoDir%\%sSourVideoDirName% ,1
接著把轉檔好的資料夾,移動到該資料夾下,後面帶參數 1 是移動後有相同檔案就複寫 (參閱 FileMove

好啦,這下轉檔好的資料,全數都在同一個資料夾下,這樣利用 Everything 的搜尋功能,把該資料夾內非轉檔好的資料一次刪除,然後在移動到你要的目標資料夾下,這樣子整理檔案就快多了。

以下為操作DEMO影片:

testa 是 來源的影片檔案
testb 是 轉檔程式輸出的檔案,執行 autohotkey 之後可以看到 Everything 被叫出來,然後關閉視窗,testa 裡面的相關來源資料夾就到 testb 去了,然後被選中的檔案也一齊放到裡面了,這樣我整理檔案的時間就減少了很多

You may also like