スクリプトの活用

11-5-10から、スクリプトをランチャ内で使用できるようになった。
標準で使用できるのはJScriptVBScriptだが、PerlPythonRubyもPCで使用環境が整っていれば使用可能。

これによりビルトインコマンドだけではできなかった動作を実現することができるようになったが、
スクリプトを扱ったことがないとなかなかうまく狙った動作を実現するのは難しい。

以下は実際に活用しているスクリプトの例。

作業フォルダを指定してプログラムを起動

aviutlはXFのランチャから実行すると、そのときのXFのカレントフォルダを作業フォルダとしてしまうため、その対策。
(aviutlのパスは、"D:\bin\aviutl\aviutl.exe")

aviutlを、親フォルダを作業フォルダに指定して起動
[パス]
Script:JScript
shell = new ActiveXObject("WScript.Shell");
shell.CurrentDirectory = "D:/bin/aviutl/";
shell.Run('D:/bin/aviutl/aviutl.exe');
[動作]
実行


こちらはフォルダメニューで"D:\bin"以下のフォルダ群からプログラムを選んで起動させる場合。

フォルダメニューからプログラムを選んで親フォルダを作業フォルダに指定して起動
[パス]
Script:JScript
fs = new ActiveXObject( "Scripting.FileSystemObject" );
shell = new ActiveXObject("WScript.Shell");
WScript.Exec('ChooseFolder:"D:\\bin\\" *.folder;*.exe')
if (WScript.Env('inputdata')) {
var path1 = WScript.Env('inputdata');
var path2 = fs.GetParentFolderName( path1);
shell.CurrentDirectory = path2;
shell.Run(path1);
}
[動作]
実行

タブの表示名を変更する

同じ名前のタブが存在する状況になったときに便利なタブ名変更関係。

タブの表示名を、「一つ上のフォルダ/現在のフォルダ」に変更
[パス]
Script:JScript
var dirs = WScript.Env('Current').split('\\');
WScript.Exec('Set: TabName=' + dirs[dirs.length-2] + '/' +dirs[dirs.length-1]);
[動作]
実行
タブの表示名を、「ドライブ名//現在のフォルダ」に変更
[パス]
Script:JScript
var fs = WScript.CreateObject("Scripting.FileSystemObject");
var path = WScript.Env('Current');
WScript.Exec('Set: TabName=' + fs.GetDriveName(path) + '//' + fs.GetFileName(path));
[動作]
実行

ファイルのパスを活用する

フォーカス位置の拡張子をコピー
[パス]
Script:JScript
WScript.Env('Clipboard',new ActiveXObject("Scripting.FileSystemObject").GetExtensionName(WScript.Env('Focused')));
[動作]
実行
現在のフォルダ名をコピー
[パス]
Script:JScript
WScript.Env('Clipboard',new ActiveXObject("Scripting.FileSystemObject").GetFileName(WScript.Env('Current')));
[動作]
実行
選択ファイルをリストに出力
[パス]
Script:JScript
var fs = new ActiveXObject("Scripting.FileSystemObject");
var Sel = WScript.Col(WScript.Env('Selected'));
var Arr = new Array();
for (i = 0; i < Sel.Count; i++) {
var strPath = Sel.Item(i);
Arr.push(strPath);
}
var file = fs.OpenTextFile(WScript.Env('C:\\temp\\list.txt'), 2, true, 0);
file.Write(Arr.join('\r\n'));
file.Close();
[動作]
実行

上では"C:\\temp\\list.txt"に選択ファイルのパスのリストが出力される。

表示切替関係

全カラムを自動幅調整
[パス]
Script:JScript
columncount = WScript.Env('Columns').split(',').length / 2;
for (i = 1; i <= columncount; i++) {
WScript.Exec('Columns:' + i + '=-1');
}
[動作]
実行
サイズとフォルダサイズ+の切り替え
[パス]
Script:JScript
str = WScript.Env('Columns')
if (str.match(/サイズ,/i)) {
WScript.Env('Columns',str.replace(/サイズ,/i,'フォルダサイズ+,'));
} else {
WScript.Env('Columns',str.replace(/フォルダサイズ\+,/i,'サイズ,'));
}
[動作]
実行
独自ソート(ファイルとフォルダの混在ソート)切り替え
[パス]
Script:JScript
WScript.Exec('Change:Style ~b~z');
WScript.Exec('Refresh:');
[動作]
実行

カスタマイズの小ネタ・・ファイルリストの読み込み

X-Finderの独自ツールフォルダのファイルは、拡張子iniのテキストファイルなので、ファイルやフォルダのパスを記述したテキストファイルを整形すれば、こういったリストをX-Finderのツールフォルダとしてタブに表示することができる。
以下ではこの整形作業を行うlist2xfを使用したカスタマイズ例を紹介する。

プレイリストやファイルリストをX-Finderで表示する

以下はアイテムの追加や削除、入れ替えなどの編集を行うため、既存のファイルリストをX-Finderのタブで開くランチャ。
編集後は元ファイルを上書き保存する前提で記述する。これらは再生リスト(m3u)等の編集等に使用できる。

ファイルリストをX-Finderで開く
[パス]
Set:listpath=%focused%
Sw:0:%ComSpec% /c ..list2xf.exe -i %focused% -o %x-finder%list.ini & %x-finder%xf.exe Extra:%x-finder%list.ini
[動作]
実行
編集後元ファイルを上書きする
[パス]
Select:All
ClipPath:18
"..Clip2Txt.exe" "%listpath%"
[動作]
実行

あらかじめ"Extra:%x-finder%list.ini"をクリップフォルダに指定しておくとさらに作業が楽になる

Everything Search Engine の検索結果をX-Finderで開く

"Everything Search Engine"の検索結果を標準出力できるコマンドラインツール、"es.exe"を利用し、検索結果をlist2xfでX-Finder用のツールフォルダファイルにし、X-Finder上でEverythingの検索結果を開くランチャ。
この例ではes.exeとlist2xf.exeはxf.exeと同じフォルダに置いている。

Everythingで検索し、検索結果を開く
[パス]
Input:"Everything","Everythingで検索","キーワード",""		
Sw:0:%ComSpec% /c cd /d %X-Finder% & es "%inputdata%" | list2xf > result.ini & xf Extra:%x-finder%result.ini
[動作]
実行


以下は上記のランチャの実行画面。ここではキーワードとして".dll"と入力している。
(実行ファイルや出力ファイルの配置は上記と異なっているので注意)


以下が検索結果画面。リスト変換後にキーワードに合致するアイテムが表示される。


こちらもあらかじめ"Extra:%x-finder%result.ini"をクリップフォルダに指定しておくとさらに作業が楽になる

以下は活用例。現在のフォルダとサブフォルダのファイルやフォルダ全てを新しいタブで表示するランチャ。表示後はワイルドカード正規表現などの通常のフィルタが使用できる。

Everythingを活用しサブフォルダのアイテム一覧をリストに表示
[パス]
Sw:0:%ComSpec% /c cd /d %X-Finder% & es -p -s "%current%" | list2xf > result.ini & xf Extra:%x-finder%result.ini
[動作]
実行


さらに以下では検索結果のツールフォルダを利用してファイルの振り分けを行うカスタマイズ例を紹介する。
ここではlist2xfの、出力結果のランチャの動作を指定する機能を使用している。


実現する機能としては、「ファイル名に含まれる文字列からファイルを移動するフォルダをリストアップし、ファイルを簡単に振り分ける」もの。
①で入力したキーワードを含むフォルダへアイテムを移動するランチャをリスト化し、
②でリストの中からアイテムの移動先を選択する。
具体的な操作の流れは以下のようになる。

  1. 移動したいアイテムをクリック(選択orフォーカスする)
  2. ①のランチャを実行
  3. フォルダ名に含まれるであろうキーワードを入力する
  4. ②のランチャを実行
  5. リストから移動させたいフォルダを選択
①文字列を名前に含むフォルダを送り先にしてリスト化
[パス]
Input:"Everything","Everythingを利用してファイルを整理","キーワードを入力","%focusedName%"
Sw:0:%ComSpec% /c cd %X-Finder% & es folder: %inputdata% | list2xf > move.ini -t 203
[動作]
実行
②リストから選んでアイテムを移動
[パス]
Extra:%x-finder%move.ini
[動作]
実行


フォルダの名前さえ覚えていれば、そのフォルダがどこにあってもすぐに移動先として選択できるのが一番の利点。
フォルダ分け自体をあまりしない人、フォルダの数が多くない人にはあまり意味がないかもしれない。

カスタマイズの小ネタ・・ファイルリストの書き出し

X-Finderで表示している順番に他のソフトで表示する

X-finder上で更新日時の降順で画像を表示していたのに画像ビューアでそのフォルダのファイルを開くと名前順に表示されてしまいソートしていた順番の違いに気がついてちょっとしたストレスを感じる。」
エクスプローラ互換にして並び順を入れ替えたその順番でファイルを実行したい」
これらの解決策として、以下では、X-Finderで表示している順番のとおりに外部ソフトでファイルを開くカスタマイズを紹介する。


流れとしては以下のようになる。

  1. "Select:All"→"ClipPath:10"でタブ内のアイテムのパスをコピー
  2. クリップボードの中身をテキスト形式のリストファイルに変換する
  3. リストファイルを外部ソフトで開く

ここではクリップボードの内容をリストファイルに変換するのにはClip2Txtを使う。
また、リストファイルはaxpathlist2.spiを使って書庫ファイルとして外部ソフトに読み込ませる。(このため、リストファイルの拡張子を".sz7"にする必要がある)
画像ビューアはSusieプラグインに対応しているMassigraを使用する。

axpathlist2.spiは事前に使用するソフト(今回はMassigra)に導入しておく必要がある

X-Finderで表示している順番にMassigraで開く
[パス]
Select:All
ClipPath:18
%ComSpec% /c "..Clip2Txt.exe" %x-finder%list.sz7 & "..Massigra.exe" %x-finder%list.sz7
[動作]
実行

上記のランチャは現在のタブがエクスプローラ互換でもクリップフォルダでも使用できる。

X-Finderで表示している順番をファイルリストに出力

単純に現在のタブの中身をテキスト形式のファイルリストに出力するだけなら、以下のランチャで可能。
ここでは出力ファイルを"list.m3u"(再生リストファイル)としているが、拡張子の記述を変えればテキスト形式のファイル全てに応用できる。

X-Finderで表示している順番をファイルリストに出力
[パス]
Select:All
ClipPath:18
"..Clip2Txt.exe" %x-finder%list.m3u
[動作]
実行

カスタマイズの小ネタ・・自動表示切替

ここまではX-Finderの機能の紹介をメインに書いてきたが、これ以降は主に既存機能あるいは外部ソフトの組み合わせで実現可能なカスタマイズの小ネタを記述していく。

しばらくは以前まとめサイトに書いた内容の詳しい説明がメインになると思う。

フォルダの先頭ファイルの種類に応じて自動的に表示形式を変更する

explorerを使用していて、「画像ファイルがあるフォルダを開くとそれまでアイコン表示だったexplorerがいきなり縮小版に切り替わった」といった経験がある人も多いかと思うが、こういった動作を自分で指定してやろうというのが本項の目的。

X-Finderでは表示形式に加えて表示する項目やソート順、壁紙やタブ名、タブの背景色なども指定することができ,任意のパスを実行したりすることも可能。
以下ではその方法を記述していく。


基本的な考え方は、「フォルダを開く」動作と「拡張子によって動作が異なるツールフォルダ(Viewchange.ini)を実行する」動作を同じランチャで実行するといったもの。
フォルダを開いた後はフォーカスは先頭のアイテムにあるので、先頭のアイテムの種類(拡張子)に応じて異なった動作をすることになる。


上記のランチャの内容は以下のとおり。

フォルダを開き自動的に表示を切り替える
[パス]
2:Open:
Select:Clear
Extra:viewchange.ini
[動作]
実行


また、viewchange.iniには以下のアイテムが登録されていることとする。

画像ファイル→縮小版
[パス]
1:ViewStyle:5
1:Columns:名前,-2,サイズ,-2,作成日時,-2,更新日時,-2,大きさ,-2
[動作]
送る
拡張
.jpg,.bmp,.png,.gif
音楽ファイル→詳細表示
[パス]
1:ViewStyle:4
1:Columns:名前,-2,サイズ,-2,ビットレート,-2,アーティスト,-2,更新日時,-2
[動作]
送る
拡張
.mp3,.wma,.ogg,.wav
動画ファイル→並べて表示
[パス]
1:ViewStyle:6
1:Columns:名前,-2,サイズ,-2,ビットレート,-2,アーティスト,-2,更新日時,-2
[動作]
送る
拡張
.mp4,.mpg,.wmv,.avi,.ogm


以上のような設定がされていれば、「フォルダを開き自動的に表示を切り替える」ランチャを用いてフォルダを開いた際、先頭アイテムがviewchange.iniに記述されたファイルだった場合はviewchange.iniで設定した表示形式、表示項目になり、それ以外のアイテム(フォルダやtxtファイル等)だった場合は通常の設定の表示形式となる。

コピーや移動、削除

β版の11-4-1より、X-Finder内での"コピー"、"移動"、"削除"といった動作を独自に設定できる機能が追加され、これらの処理にX-Finder内部の機能だけでなく外部プログラムが使用できるようになった。

それぞれの動作の具体的な対象は以下の操作になる。

コピー
explorer互換の右クリックメニューの"コピー"、あるいは"Exec:Copy"コマンドの実行から、explorer互換の右クリックメニューの"貼り付け"あるいは"Folder:Paste"コマンドの実行の組み合わせ。左D&Dのコピー操作。右D&Dからの"ここにコピー"。
移動
explorer互換の右クリックメニューの"切り取り"、あるいは"Exec:Cut"コマンドの実行から、explorer互換の右クリックメニューの"貼り付け"あるいは"Folder:Paste"コマンドの実行の組み合わせ。左D&Dの移動操作。右D&Dからの"ここに移動"。
削除
explorer互換の右クリックメニューの"削除"、あるいは"Exec:Delete"コマンドの実行。


また、新たに追加されたコマンドは以下のとおり。

  • Copy: [項目]… /t [送り先] [オプション]・・・コピー
  • Move: [項目]… /t [送り先] [オプション]・・・移動
  • Delete: [項目]… [オプション]・・・・・・・・削除
  • オプション
    • /a・・・Shiftを押していなければ、できるだけ元に戻せる様にする
    • /b・・・バックグラウンドで処理する
    • /e・・・同一フォルダであれば名前が重ならないようにする
    • /f・・・ワイルドカード指定時にディレクトリを含まない
    • /m・・・複数の複写先を指定する
    • /r・・・名前が重ならないようにする
    • /s・・・経過を表すダイアログボックスを表示しない
    • /u・・・できるだけ元に戻せる様にする
    • /y・・・表示されるダイアログボックスで「はい」「すべて」を選択するようにする

項目はDOSワイルドカード(*.txt 等)でも指定できる。

"ツール"→"詳細オプション"に「コピー」「移動」「削除」といった項目が無い場合は、手動で拡張が「copy」「move」「delete」といったアイテムを作成するか、"ツール"→"基本オプション"の「その他」タブで「シェル」以外を選択して適用すればよい。


以下はコマンド活用の具体例。

選択アイテムを反対側のタブに移動
[パス]
Move: %Selected% /t "%other%" /b /u /r
[動作]
実行
ごみ箱を空にする
[パス]
Delete: shell:RecycleBinFolder
[動作]
実行


また、詳細オプションの「コピー(拡張;copy)」や「移動(拡張;move)」、「削除(拡張;delete)」といった項目を編集すれば、通常のD&Dでの操作やランチャでの操作を、上記のオプションを指定した動作に設定したり、FireFileCopyやFastCopy等の外部プログラムを用いた処理に変更することが可能。

当たり前だが、外部プログラムでの処理を行うとX-Finder側から「元に戻す」ことはできないので注意

以下はカスタマイズ例。

移動の際はダイアログで確認する
[パス]
Confirm:"ファイルの移動","「%InputData%」へ移動"
Move: %Selected% /t "%InputData%" /b /u
[動作]
実行
[拡張]
Move
コピーの際は常にベリファイ・サムネイルもコピー(FFC)
[パス]
..FFC.exe /copy /go! /to:"%InputData%" /vf /st
[動作]
実行
[拡張]
Copy

(ハッシュ計算用の外部DLLが必要)
コピーの際は常にベリファイ・サムネイルもコピー(FC)
[パス]
..fastcopy.exe /cmd=force_copy /auto_close /to="%InputData%\" /verify /stream
[動作]
実行
[拡張]
Copy
復元を無効化して削除(FC)
[パス]
Confirm:"ファイルの削除","復元を無効化して削除します。よろしいですか?"
..fastcopy.exe /cmd=delete /auto_close /overwrite_del
[動作]
実行
[拡張]
Delete

コンテキストメニューのカスタマイズ

ツールバーを始めとした多種多様なメニューをカスタマイズできるのはX-Finderの便利な機能の一つだが、特にコンテキストメニュー(右クリックメニュー)についてはシステム標準のメニューと組み合わせて様々なカスタマイズが可能になっている。


コンテキストメニューのカスタマイズの区分けは以下のとおり。これらの表示を後述の設定で切り替えることができる。

互換メニュー
Explorerで表示されるメニュー。
標準メニュー
X-Finderが独自に表示するメニュー。内容はExplorerコンテキストメニューの拡張の有無などの環境によって異なり、独自にカスタマイズすることはできない。
拡張メニュー
ツールフォルダの「右クリック(Context:)」で設定できるメニュー。
余白のコンテキストメニュー
ファイルやフォルダがない場所を右クリックした際に表示されるメニュー。基本オプション→"操作"タブ→"余白のコンテキストメニュー"で変更する。(デフォルトは"Context:")

余白を右クリックするとアイテムの選択が外れるため、余白のコンテキストメニューには選択項目が関係ないランチャを登録するのが望ましい


設定は以下のようにメニューの"表示"→"コンテキスト メニュー"から行える。

以下は上記項目の具体例。

標準メニューのみ表示
拡張メニューを全く表示しない状態。互換メニューにチェックされた状態だとExplorerと全く同じコンテキストメニューとなる。画像は左が表示メニュー(何もアイテムがないところでのメニュー)、右がファイルメニュー(アイテム上でのメニュー)。

階層メニューをたどることもできないので拡張メニューの項目のカスタマイズは無意味となる

拡張メニューのみ表示
標準メニューや互換メニューを全く表示しない状態。システムと完全に独立したメニューしか表示されないので標準メニューや互換メニューを表示する設定のときより高速に表示されるが、逆に言えばシステムの恩恵を受けられなくなるので自分の設定で補わないと不便なこともある。


拡張メニュー重視
拡張メニューを最初に表示し、標準メニューを階層から表示させる状態。"ファイルメニュー"、"表示メニュー"を選択するとそれぞれの標準メニューを表示することができる。標準メニューを選ばなければ"拡張メニューのみ表示"と同様に高速に表示できる。


拡張メニューを階層表示
標準メニューを最初に表示し、拡張メニューを階層から表示させる状態。


拡張メニューを右に表示
標準メニューの右に拡張メニューを固定表示する状態。


拡張メニューを下に表示
標準メニューの下に拡張メニューを固定表示する状態。

互換メニュー
標準メニューの代わりにExplorerの右クリックメニューが表示される。この項目にチェックを入れて"標準メニューのみ表示"を選択するとExplorerと全く同じコンテキストメニューとなる。
拡張メニューはアイコン表示
固定表示する際の拡張メニューをアイコン表示のみにする。メニュー表示の際に場所をとらなくてすむようになるが、アイコンのみで内容がわかるような設定にしておかないと混乱するかもしれない。

カスタマイズの例

"拡張メニュー重視"や"拡張メニューのみ表示"の設定にすると、以下のようなメリットがある。

  • メニューの中身をほぼ完全にカスタマイズできる
    • 各項目にアイコンを表示して視認性を上げる
    • 普段使わないような項目を消してコンパクトに
    • 表示するツールフォルダを切り替えて表示内容を丸ごと変更
  • Explorerの拡張の状態やフォーカスされたアイテムの種類に関わらず高速にメニューを表示することができる


だが、この設定だとExplorer互換のメニューが最初に表示されないため、既に導入しているソフトによって拡張された項目をよく利用している場合は自分でその項目を追加しておくと良い。

以下は標準メニューの内容の代替を設定したカスタマイズ例。
(動画や書庫といったファイルでも環境に関わらず高速にメニューが表示できる状態)

まともな? まとめその2

正式版11-3が元旦(!?)に登場したので、この備忘録も内容を若干修正しました。
それに伴い、まとめ(chmファイル)のほうも作り直してみました。
前回は考えなしに作っていたので、今回は無駄な部分を削ってちょっと軽量化しました。(約8.3M)
少しは動作もスムーズになっているかと思います。

ダウンロードはこちらから。

例によって転載、再配布はお好きにどうぞ。(同梱物について不都合な点があればここにコメントください)