いまいち使い方が把握できていないまま試したので、もっと楽な方法があるかも。
pythonなどで書かれた、簡単なファイル処理を行うスクリプト(引数としてファイルのパスを与えられ、ファイルに何らかの操作をするもの)に、As/Rで現在選択中のファイル(群)を渡す方法。
例として「バックアップとして、ファイル名の末尾に今日の日付を付与して同じディレクトリにコピーを作成する」というスクリプトがあったとする。「project.php」を引数に渡すと「project_20150202.php」を作ってくれるみたいなね。んで、As/Rで選択中のファイルにそのスクリプトを適用したいとする。
結論から言うと、コマンド定義ファイルとスクリプトコマンドファイル、2つのファイルを編集/作成する必要がある。
また、それを使うには、オプションの「キー割り当て」等から、定義したコマンドを何らかの操作に割り当てる必要がある。
As/Rで特定の動作(コマンド)を登録するには、「(ユーザーフォルダ)\ScriptCommand.txt
」などコマンド定義ファイルにコマンドIDとともに記述する。コマンド定義ファイルは他にも ExternalUserCommand.txt
など複数あり、用途に沿ったファイルに定義する。
ScriptCommand.txt
に定義する必要があるっぽい。
As/Rに最初から定義されているコマンド群の多くは(スクリプトコマンドも含め)一括で ExternalDefCommand.txt
にまとめられているため、
同じようにユーザーが定義するものは一括で ExternalUserCommand.txt
に書いても良さそうに見えるが、
実際はスクリプトコマンドを定義してもエラーで実行できない。
例えば ExternalDefCommand.txt
における「選択中のファイルをエディタで起動させるスクリプトコマンド Script/Editor.txt
」の定義と
同様のものを、コマンドIDだけ変更して ExternalUserCommand.txt
に定義して呼び出しても、エラーで実行できない。
ScriptCommand.txt
に定義すると実行できる。
ExternalUserCommand.txt
は、名前の通りあくまで「外部コマンド」定義用で、それ以外も定義できる ExternalDefCommand.txt
が少し特別な扱いという感じなのかな。
書式は次の通り。
コマンドID<TAB>ファイル情報の送信手順(省略可能)<TAB>コマンドの呼び出しの抑止モード<TAB>コマンドのフルパス<TAB>説明
コマンドのフルパスには、「外部実行ファイル(.exe)」または「スクリプトコマンドファイル」を指定できる。
このうち外部実行ファイルを使うと、実行ファイルは実行されるものの、引数として指定できる内容は限られ、現在選択中のファイルを指定することができない。(現在のディレクトリなど一部は指定することができる)
よって、スクリプトコマンドファイルを指定する方法を取ることになる。今回の例だと以下のように定義しておけばいい。
40004<TAB>NF-<TAB>%Script_dir%copyFileWithDate.txt<TAB>日付を付与してバックアップ
NFD
とする%Script_dir%
は、ユーザーフォルダのScript
フォルダに置換される。
スクリプトコマンドファイルは、(どこでもいいのだが基本は)「(ユーザーフォルダ)\Script\
」以下にUTF-16のテキストファイルで作る。引数の内容や渡し方(まとめてor1個ずつなど)など、いくつかの細かな設定を行った後、「Run=(実行ファイルのフルパス)」で実行する。
今回の例だとコマンド定義ファイルで指定した通り「(ユーザーフォルダ)\Script\copyFileWithDate.txt
」を作成し、内容を以下のようにする。
CommandLineOption="(実行したいpythonスクリプト.py)" ?SelFile? MultiCommandMode=1 ShiftSilentMode=0 BootDir= BootMode=0 OpenMode=0 ShowWindow=6 Run=(python本体)\python.exe
これで、選択中のファイル(?SelFile?が置換される)を、pythonスクリプトに渡すことができた。
後は、As/Rのオプションからキー割り当てでこのコマンドをたとえばShift-Bにでも割り振っておけば、一発でバックアップを作成できる。
普通はこれだけでよいが、あまり簡単に実行できてしまうと、日常で使っていく内についうっかりキーを間違えてしまわないとも言い切れない。行う処理が時間のかかるものだったり、削除など破壊的な動作をするものであれば、なおさら面倒なことになる。
スクリプトコマンドファイルで、メッセージボックスを表示させることができる。
OK/キャンセル型のメッセージボックスを表示し、押されたボタンを戻り値として変数に格納、if分岐で実行を制御できる。
CommandLineOption= ... MultiCommandMode= ... ... var $確認$ = MessageBox,0x131,○○を本当に実行しますか? if 1 == $確認$ Run=(実行ファイルへの絶対パス) endif