Windows XPまではExplorerメニューの「ツール → フォルダオプション」の「種類」の項目で、ファイルを開くときのコマンドを指定できました。その際に、コマンドラインオプションを指定することもできたのですが、Windows7 (おそらくVistaも)ではファイルを開くアプリの指定だけで、オプションを追加することができなくなっています。今回は、Windows7でコマンドラインオプションを指定しつつファイルの関連付けを行う方法の紹介です。
GUIの画面からオプションを指定することは(おそらく)できませんので、Windowsのプロンプトからコマンドを実行する必要があります。必要なコマンドは ftype 、関連するコマンドが assoc 。assoc でファイルタイプ(拡張子)の登録、ftype でファイルに対する操作の指定というかんじです。
解説は後回しにして、必要事項だけ。すでにオプションなしでのファイルの関連付けは済ませてあるのが前提です。(関連付けがうまくいかない人は管理者権限忘れてる。) 7z拡張子のファイル関連付けに、オプションを追加するという具体例で説明します。
1. プロンプトを管理者権限で開く。
2. アクセスしやすいディレクトリに cd コマンドで移り、 ftype 1> ftype.txt と実行してファイルの関連付けリストを書き出し。
3. エディタなどで ftype.txt の編集。
7-Zip.001="C:\Program Files\7-Zip\7zFM.exe" "%1"
7-Zip.7z="C:\Program Files\7-Zip\7zFM.exe" "%1"
7-Zip.bz2="C:\Program Files\7-Zip\7zFM.exe" "%1"
7-Zip.bzip2="C:\Program Files\7-Zip\7zFM.exe" "%1"
...(略)...
これをvim上で正規表現を使って一気に置換。7-Zipは適宜置きかえてください。
:%s;7-Zip\(.*\)"%1";ftype 7-Zip\1x "%%1";g
(バッチファイル中では % は %% でエスケープ)
%s;FM;;g
(私の場合は実行ファイルを 7zFM.exe から 7z.exe に変える必要もある)
結果。
ftype 7-Zip.001="C:\Program Files\7-Zip\7z.exe" x "%%1"
ftype 7-Zip.7z="C:\Program Files\7-Zip\7z.exe" x "%%1"
ftype 7-Zip.bz2="C:\Program Files\7-Zip\7z.exe" x "%%1"
ftype 7-Zip.bzip2="C:\Program Files\7-Zip\7z.exe" x "%%1"
...(略)...
4. ftype.txt を ftype.bat にファイル名変更。
5. ftype.bat を管理者権限で実行。
6. 実際にその拡張子のファイルをダブルクリックして、望む結果が得られるかチェック!
7-Zip 、7zFM.exe などは各々置き換えてください。少ないなら正規表現使わず手動でやるのもアリ。以上!
以下解説。
> help assoc
ファイル拡張子の関連付けを表示または変更します。
ASSOC [.拡張子[=[ファイル タイプ]]]
.拡張子 ファイル タイプに関連付ける拡張子を指定します。
ファイル タイプ 拡張子に関連付けるファイル タイプを指定します。
パラメーターを指定しないで「ASSOC」と入力すると、現在のファイルの関連付け
を表示します。ファイル拡張子を指定して ASSOC を実行すると、そのファイル
拡張子の現在のファイルの関連付けを表示します。ファイル タイプやコマンド
を指定しないと、そのファイル拡張子の関連付けを削除します。
> help ftype
ファイル拡張子の関連付けに使われるファイル タイプを表示または変更します。
FTYPE [ファイル タイプ[=[オープンコマンド文字列]]]
ファイル タイプ 表示または変更するファイル タイプを指定します。
オープンコマンド文字列 このタイプのファイルを開くために使うコマンドを
指定します。
パラメーターを指定しないで「FTYPE」と入力すると、オープン コマンド文字列
が定義されている現在のファイル タイプを表示します。ファイル タイプ
だけを指定して FTYPE を実行すると、そのファイル タイプの現在のオープン
コマンド文字列を表示します。オープン コマンド文字列に何も指定しない
と、そのファイル タイプのオープン コマンド文字列を削除します。
オープン コマンド内の %0 または %1 は、関連付けを使って開かれる
ファイル名で置き換えられます。%* はすべてのパラメーターを取得し、
%2 は第 1 パラメーター、%3 は第 2 パラメーターを取得します。%~n は、
第 n パラメーターから最後までのパラメーターを取得します。n は、2 から 9
の値です。たとえば、
ASSOC .pl=PerlScript
FTYPE PerlScript=perl.exe %1 %*
と入力すると、次のように Perl スクリプトが起動されます。
script.pl 1 2 3
次のようにすると、拡張子を入力する必要がなくなります。
set PATHEXT=.pl;%PATHEXT%
スクリプトは、次のようにして起動できるようになります。
script 1 2 3
7-Zipというファイル解凍ソフト、対応している圧縮形式が多くて好きなのですが、ファイルをダブルクリックしたときにファイルマネージャで開くというワンクッションをはさむのでイマイチ使いづらいです。そこでファイルマネージャ(7zFM.exe)を使わず、コマンドライン 7z.exe に e または x オプションを追加して実行するのが目的となります。(x オプションはディレクトリを作ってその中で解凍。 e はその場で解凍。)
プロンプトから ftype とだけ実行すると現在の関連付けリストが表示されます。変更したいファイルの関連付けは1つだけではないので、一括処理(batファイル)で処理することに決めました。
> ftype 1> ftype.txt
プロンプトのリダイレクト機能(ファイルに書き出す)を使って ftype の結果を ftype.txt に書き出します。
7-Zip.001="C:\Program Files\7-Zip\7zFM.exe" "%1"
7-Zip.7z="C:\Program Files\7-Zip\7zFM.exe" "%1"
7-Zip.bz2="C:\Program Files\7-Zip\7zFM.exe" "%1"
7-Zip.bzip2="C:\Program Files\7-Zip\7zFM.exe" "%1"
...(略)...
7zFM.exe だとどうしてもファイル解凍ダイアログが出てしまうので 7-Zip 同梱の 7z.exe (コマンドライン用) を使うことに。文字を手動で書き換えるか、一括置換します。私は vim 使って正規表現で置換しました。正規表現、vim の置換機能の説明は省きます。
ftype 7-Zip.001="C:\Program Files\7-Zip\7z.exe" x "%%1"
ftype 7-Zip.7z="C:\Program Files\7-Zip\7z.exe" x "%%1"
ftype 7-Zip.bz2="C:\Program Files\7-Zip\7z.exe" x "%%1"
ftype 7-Zip.bzip2="C:\Program Files\7-Zip\7z.exe" x "%%1"
...(略)...
がんばった結果、こうなります。 % を %% にしたのは、Windows のbatファイル中でのエスケープ文字仕様のためです。batファイル実行でなく、プロンプトでひとつ実行するだけなら %% 化は要りません。
あとは ftype.txt を実行するために ftype.bat にファイル名変更して、管理者権限で実行。これでおしまいです。コマンドラインで実行してるので 7z をダブルクリックした際にプロンプトが出るようになってしまいますが、これは仕方ないです。どうにかプロンプトを隠す方法もあった気がしますが、あればそれはまた次回。
結局プロンプトがダサい出方するのでなんだかなーと言ったかんじですが、どうしても7-Zip使いたい人向け、かなぁ。Windows7でファイル関連付けにオプション追加ができるというのは、何かしら使いどころがありそうなのでいつか役に立つことでしょう。いくつも圧縮伸張ソフトいれるの好ましくないという点だけで、変にこだわってしまいました。
参考。
【ハウツー】レッツ! Windows 7 - トラブルシューティング編(3) (2) 特定拡張子のアプリケーション関連付けを追加する
http://news.mynavi.jp/articles/2010/02/12/w7/001.html
beautiful-moon.net » Blog Archive » 【7-zip】zipファイルをダブルクリックで一発解凍(Windows XP編)
http://beautiful-moon.net/2011-07-12_7-zip_ippatsu_extract/
追記。
7z x だけだとやはりダメで解凍先ディレクトリ名を指定する必要がありそう。7z x -o dirname でいけるのですが、unixのbasename的なコマンド探すのがめんどうになったのでもうExplzh使おう…。(´д`;) 7zだけ「基準フォルダがない」とか出るのですが原因不明。日本語フォルダ名のせいでもなくファイル名のせいでもなさげなのです。7zだけ7-Zip使えばいいかな。