之前一直在使用 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(能用就行,不要脑抽