ファイルを逐次選択してアプリを起動するランチャ 2015-12-10 (Thu) 23:51

例えば、X-FinderからコマンドラインでWinMergeを起動するとき、比較対象のファイルが別々のフォルダにある場合、
1アクションで2つのファイル選択して渡すことができないので、ファイルを一つずつ選択できる右クリックランチャを作る。

◎概要

・2つのファイルが同一フォルダにある場合

  目的のファイルを2つ選択してランチャを実行 → WinMerge起動

・2つのファイルが別々のフォルダにある場合

  最初のファイルを選択してランチャを実行 → そのファイルのパスを環境変数に保存
  別フォルダで次のファイルを選択してランチャを実行 → 環境変数を参照してWinMerge起動

※最初のファイルを選択した状態で処理を中止する場合は、ファイルの選択を解除した状態でランチャを実行する。


◎実装

右クリックにランチャを登録

  名前:ファイル比較 (任意に変更可能。但しC_NAMEと一致させること)
  パス:Include:JScript ファイル比較.js
  動作:パスを実行


◎補足

スクリプト中の下記変数は環境に合わせて適宜変更

  E_NAME:最初のファイルのパスを保存する環境変数名
  C_NAME:右クリックに登録したランチャ名
  TOOL :WinMergeのパス


ファイル比較.js
var sel = WScript.Col(WScript.Env('CurrentSelected'));
if(sel.Count > 2) WScript.Quit();

var E_NAME = 'FileDifferenceParam';
var C_NAME = 'ファイル比較';
var TOOL = 'D:/Tools/WinMerge/WinMergeU.exe';

WScript.Include('ツールフォルダ操作拡張.js');
var Env = new ToolFolderExt('Env:');
var Context = new ToolFolderExt('Context:');
var fs = new ActiveXObject('Scripting.FileSystemObject');
var shell = new ActiveXObject('WScript.Shell');

function run(command){
return(shell.Run(command, 5, false));
}

function clear(){
var a = Env.SearchByName(new RegExp('^' + E_NAME + '$'), 0);
if(a >= 0){
Env.Delete(a);
var b = Context.SearchByName(new RegExp('^' + C_NAME), 0);
if(b >= 0){
var c = Context.GetProperties(Context.Item(b));
c.Name = C_NAME;
Context.SetItem(Context.Item(b), c);
}
}
}

switch(sel.Count){
case 0:
clear();
break;

case 1:
if(!fs.FileExists(sel.Item(0))) break;
var a = Env.SearchByName(new RegExp('^' + E_NAME + '$'), 0);
if(a >= 0){
run(TOOL + ' "' + WScript.Env(E_NAME) + '" "' + sel.Item(0) + '"');
clear();
}
else{
Env.SetItem(Env.Add(), { Name: E_NAME, Path: sel.Item(0) });
var b = Context.SearchByName(new RegExp('^' + C_NAME), 0);
if(b >= 0){
var c = Context.GetProperties(Context.Item(b));
c.Name += ' (選択中)';
Context.SetItem(Context.Item(b), c);
}
}
break;

case 2:
clear();
if(!fs.FileExists(sel.Item(0)) || !fs.FileExists(sel.Item(1))) break;
run(TOOL + ' "' + sel.Item(0) + '" "' + sel.Item(1) + '"');
break;
}
関連記事

コメントの投稿

管理者にだけ表示を許可する

注意事項
基本的にこのブログはブログ主の備忘録です。

ブログの内容にはブログ主の主観や時には正確でない情報が含まれていることもあります。書いてある内容がすべての環境にあてはまることを保証するものでもありません。
また過去の記事の情報はそれが参照された時点では既に陳腐化していることもあります。

その辺をご理解の上で当ブログ内に書いてあることを試す場合は自己責任でお願いします。

万一何らかの損害が生じても責任は持てませんのであしからず!

記事内容の誤りの指摘、疑問点の回答などコメント頂けると助かります。
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
ブログ内検索
カラーコードチェッカ
カラーコードの確認
入力例) #ffffff | blue
カテゴリ
最新記事
最新コメント
最新トラックバック
リンク
ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文: