スクリプトをもっと詳しく

選択したファイルの拡張子を見て起動アプリの切り替え、上級者版


 エディタの起動とか、ビューアーの起動とか、拡張子を判別して実行する専用のExRunコマンドがあります。
 そちらはオプションから簡易設定のダイアログもあるし、あれでもかなり自由度の高いカスタマイズが可能です。
 ただですね、もっと高度で、きめ細かい設定が欲しいという声もわりと際限なくあるわけで、そういった要望にこたえるために用意された、かなり強力なカスタマイズの段階になります。
 残念ながら本稿執筆時点で、ほとんど使われてない機能なんですがね・・・。

 まぁ、例によってサンプルをダカダカ書いていきます。

CheckGrammar=1
var $IsDirectory$
//ファイルを選択している数だけ繰り返す
for
	$IsDirectory$ = IsDirectory,?selfile?
	if $IsDirectory$ == 1
		//ディレクトリなので以降の処理をスキップして次のファイルを調べる
		//フォルダジャンプとかフォルダに対する動作なら、このあたりに記述すると良いですよ
		continue
	endif
	if ?selfile? ^ *.txt;*.ini
		//コマンドラインオプションを指定してメモ帳で起動する、Runコマンドの使用例(シェル実行モード)
		CommandLineOption=?selfile?
		MultiCommandMode=0
		SendInfoMode=0
		ShiftSilentMode=0
		BootMode=0
		OpenMode=0
		Run=notepad.exe
		continue
	endif
	if ?selfile? ^ *.html;*.htm;*.css
		//簡単な記述で、外部コマンドを実行する例(プロセス生成モード)
		Exec=notepad.exe "?selfile?"
	endif
next
exit


 以前のページで説明した内容は省略します。

 このスクリプトで一番重要なキモな部分は、for~next/continue/breakの選択ファイルでループする制御文がまずひとつ。
 forとnextの間の処理を、選択アイテムの数だけ繰り返します。
 その間、?selfile?とかの置換マクロは、選択ファイル名に置き換えられるので、選択したファイルを順々に処理していくことができます。
 もちろん、拡張子部分だけ取り出したりとか、現在パスとかの置換マクロも用意されてるのでヘルプの方もあわせて参照ください。

 次のキモは、ディレクトリか否かの判定処理です。
「$IsDirectory$ = IsDirectory,?selfile?
if $IsDirectory$ == 1」
 この部分ですが、1行目のIsDirectoryというコマンドで、カンマ以下のパス記述がディレクトリか否か判定結果を返してきます。
 で、2行目のif文で処理を分けているわけですね。

 3番目のキモはif文の判定条件です。
「if ?selfile? ^ *.txt;*.ini」真ん中にある「^」が比較演算子で、ワイルドカード指定で一致するか判定します。
「;」で区切れば、複数の拡張子を一度に判定することができます。

 あと、実行コマンドのところはさらっと流しちゃいますが、コマンドの実行コマンドはRun/Shell/Call/Exec、あと拡張子判別のExRunの5種類があります。
 それぞれのコマンドの違いに関してはヘルプに専用ページがあるので、詳しくはそちらを参照してください。
 まぁ、ちょろちょろっスクリプトを書くのならExecが一番楽でしょうね。

 ざっくり違いを書いておくと、こんな感じです。
Run・・・シェル起動、オプション多い、権限昇格あり、置換マクロに制限あり、終了を待たない
Shell・・・シェル起動、オプション多い、権限昇格あり、置換マクロに制限なし、終了を待たない
Call・・・プロセス起動、オプション少ない、権限昇格なし、終了を待つ、実行プログラムの終了コードの取得可
Exec・・・プロセス起動、オプション少ない、権限昇格なし、終了を待たない