7-Zip 使用 AutoHotkey 快捷解压压缩文件

前言

之前一直在使用 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 解压压缩文件

脚本内容

Copy
!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（能用就行，不要脑抽