前言#
之前一直在使用 Bandizip,很喜歡這款軟體「自動解壓」功能,這個功能與「解壓到『文件夾』」功能不完全相同。
官網介紹
當壓縮包裡只有一個文件時,就會解壓到「當前文件夾」
當壓縮包裡的文件都在同一個文件夾時,就會解壓到「當前文件夾」
若非如此,則會解壓到「文件名文件夾」中
在 Unix 壓縮的文件一般都會捆綁在一個文件夾中,將這些文件解壓到「文件名文件夾」時,會出現多個同名文件夾,很不方便。
此時,使用「自動解壓」功能就會很方便。Bandizip 會自動判斷將文件壓縮到「當前文件夾」還是「文件名文件夾」中。
今天突然腦抽卸載了 Bandizip,安裝了久仰的 7-Zip,發現在 Windows 11 上右鍵菜單想使用「解壓到『文件夾』」是如此的繁瑣,由於 7-Zip 沒有適配 Windows 11 的新版右鍵菜單,所以想要右鍵解壓需要去二級、三級菜單去找,而且也僅僅是「解壓到『文件夾』」這種笨拙的選擇。若直接打開壓縮包使用工具欄的「提取」,當壓縮包內的文件都在一級目錄,又會直接提取到壓縮包所在目錄,搞得亂七八糟。
於是開始搜尋快捷方法。首先是找到了適配 Windows 11 新版右鍵菜單的 Nanazip,但不到不得已不喜歡二次開發;然後搜索到有使用 AutoHotkey 實現Ctrl + Alt +左鍵
選中壓縮包實現解壓,我嘗試使用網絡上的腳本複現但失敗了,又簡單修改下腳本繼續嘗試但皆無功而返。
最後我選擇退而求其次,仍然使用 AutoHotkey,但換一種思路實現。
思路#
-
選中壓縮文件
-
使用 AutoHotkey 發送
Ctrl + C
命令複製壓縮文件路徑到剪貼板Windows「複製」文件時只是把文件的路徑寸放到剪貼板,類型為 CF_HDROP 一個文件列表,當「粘貼」是才會真正複製文件。
CF_HDROP:類型
HDROP
的句柄,用於標識文件列表。 應用程序可以通過將句柄傳遞給DragQueryFile
函數來檢索有關文件的信息。 -
讀取剪貼板中壓縮文件路徑賦予變量
SelectedFile
-
對變量
SelectedFile
刪除.
及之後的擴展名,並賦予變量dirAndFileName
-
運行命令
7z x "%SelectedFile%" -o"%dirAndFileName%" -y
調用 7-Zip 解壓壓縮文件
腳本內容#
!x::
; 複製選中文件
SendInput, ^c
Sleep 50
; 讀取剪貼板選中文件路徑
SelectedFile := Clipboard
; 創建文件同名文件夾變量
dirAndFileName := SubStr(SelectedFile, 1, InStr(SelectedFile, ".", 0, -1) - 1)
; 解壓到文件同名文件夾下
RunWait, 7z x "%SelectedFile%" -o"%dirAndFileName%" -y
return
使用方法#
保存腳本內容為 AutoHotkey 文件後運行,選中壓縮文件使用Alt + X
快捷鍵即可直接解壓壓縮文件。
最後#
但是還是不如 Bandizip 的「自動解壓」功能(XD(能用就行,不要腦抽