前書き#
以前は常に Bandizip を使用していましたが、このソフトウェアの「自動解凍」機能がとても気に入っています。この機能は「フォルダに解凍」機能とは完全に異なります。
公式ウェブサイトの説明
圧縮ファイル内にファイルが 1 つだけある場合、現在のフォルダに解凍されます。
圧縮ファイル内のファイルがすべて同じフォルダにある場合、現在のフォルダに解凍されます。
それ以外の場合、ファイル名のフォルダに解凍されます。
Unix で圧縮されたファイルは通常、1 つのフォルダにバンドルされています。これらのファイルを「ファイル名のフォルダ」に解凍すると、複数の同じ名前のフォルダが表示されて非常に不便です。
このような場合、自動解凍機能を使用すると便利です。Bandizip は、ファイルを現在のフォルダに解凍するか「ファイル名のフォルダ」に解凍するかを自動的に判断します。
今日、突然 Bandizip をアンインストールし、7-Zipをインストールしました。Windows 11 で右クリックメニューで「フォルダに解凍」を使用するのは非常に面倒です。7-Zip は Windows 11 の新しい右クリックメニューに対応していないため、右クリックで解凍するには 2 つ、3 つのメニューをたどる必要があります。また、「フォルダに解凍」などの不器用な選択肢しかありません。圧縮ファイルを直接開いてツールバーの「抽出」を使用すると、圧縮ファイル内のファイルがすべて 1 つのディレクトリにある場合、圧縮ファイルがあるディレクトリに直接抽出されてしまい、ごちゃごちゃになります。
そこで、ショートカット方法を探し始めました。まず、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 の「自動解凍」機能には及びません(笑)。使えればそれでいいので、脳が抜けないようにしましょう。