シェルコマンドを実行

提供: MeryWiki
移動先: 案内検索

シェルコマンドを実行してその結果をアウトプットバーに出力するマクロです。

エディタの内容を標準入力経由でコマンドに渡して処理することもできます。
(テキストを選択してマクロ起動、実行コマンドに"sort | uniq"を指定するような使い方)

未だにテキスト処理にフィルタコマンドを多用する私くらいしか需要はないかなとは思いつつ、誰かに拾っていただければ幸いです。
(2013/12/30:稀に標準出力の最後を取り損ねることがあるため、最終行に標準出力の読み込みを追加しました)

/**
 * シェルコマンドを実行する。
 * 2013 S.Sasaki
 * 内容:
 * マクロを起動するとプロンプトが表示されるので、
 * 実行するシェルコマンドを指定します。
 * 実行結果はアウトプットバーに出力されます。
 * 内部コマンド・外部コマンド・パイプが指定可能です。
 * エディタのテキストが選択されている場合は、
 * 選択されたテキストをシェルコマンドに標準入力で渡します。
 */
 
// 実行するシェルコマンドの問い合わせ
var commandStr = prompt("command?", "");
if (!commandStr || commandStr.length < 1) {
	// 未入力なら終了
	Quit();
}
 
// シェルコマンドの実行
var WShell = new ActiveXObject('WScript.Shell');
var exec = WShell.Exec("%comspec% /c=" + commandStr);
 
// エディタのテキストが選択されていたなら
if (!document.Selection.isEmpty) {
	// 標準入力に選択されたテキストを書きこむ
	exec.StdIn.Write(document.Selection.Text);
	exec.StdIn.Close();
}
 
// アウトプットバーにシェルコマンド実行結果を出力
outputbar.visible = true;
outputbar.Clear();
while (exec.Status == 0) {
	outputbar.Write(exec.StdOut.ReadAll());
	sleep(100);
}
outputbar.Write(exec.StdOut.ReadAll());