xChar

前言

之前一直在使用 Bandizip,很喜欢这款软件「自动解压」功能,这个功能与「解压到『文件夹』」功能不完全相同。

官网介绍

  • 当压缩包里只有一个文件时,就会解压到「当前文件夹」

  • 当压缩包里的文件都在同一个文件夹时,就会解压到「当前文件夹」

  • 若非如此,则会解压到「文件名文件夹」中

在 Unix 压缩的文件一般都会捆绑在一个文件夹中,将这些文件解压到「文件名文件夹」时,会出现多个同名文件夹,很不方便。

此时,使用「自动解压」功能就会很方便。Bandizip 会自动判断将文件压缩到「当前文件夹」还是「文件名文件夹」中。

今天突然脑抽卸载了 Bandizip,安装了久仰的 7-Zip,发现在 Windows 11 上右键菜单想使用「解压到『文件夹』」是如此的繁琐,由于 7-Zip 没有适配 Windows 11 的新版右键菜单,所以想要右键解压需要去二级、三级菜单去找,而且也仅仅是「解压到『文件夹』」这种笨拙的选择。若直接打开压缩包使用工具栏的「提取」,当压缩包内的文件都在一级目录,又会直接提取到压缩包所在目录,搞得乱七八糟。

于是开始搜寻快捷方法。首先是找到了适配 Windows 11 新版右键菜单的 Nanazip,但不到不得已不喜欢二次开发;然后搜索到有使用 AutoHotkey 实现Ctrl + Alt +左键选中压缩包实现解压,我尝试使用网络上的脚本复现但失败了,又简单修改下脚本继续尝试但皆无功而返。

最后我选择退而求其次,仍然使用 AutoHotkey,但换一种思路实现。

思路

  1. 选中压缩文件

  2. 使用 AutoHotkey 发送Ctrl + C命令复制压缩文件路径到剪切板

    Windows「复制」文件时只是把文件的路径寸放到剪切板,类型为CF_HDROP一个文件列表,当「粘贴」是才会真正复制文件。

    CF_HDROP:类型HDROP的句柄,用于标识文件列表。 应用程序可以通过将句柄传递给DragQueryFile函数来检索有关文件的信息。

  3. 读取剪切板中压缩文件路径赋予变量SelectedFile

  4. 对变量SelectedFile删除.及之后的扩展名,并赋予变量dirAndFileName

  5. 运行命令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(能用就行,不要脑抽

Loading comments...