「シェルコマンドを実行」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
日付のフォーマットを変更
MSY-07 (トーク | 投稿記録)
オブジェクト名の修正(マクロリファレンス:3:OutputBar オブジェクトを参照)
 
(同じ利用者による、間の2版が非表示)
8行目: 8行目:
未だにテキスト処理にフィルタコマンドを多用する私くらいしか需要はないかなとは思いつつ、誰かに拾っていただければ幸いです。
未だにテキスト処理にフィルタコマンドを多用する私くらいしか需要はないかなとは思いつつ、誰かに拾っていただければ幸いです。


(2013-12-30:稀に標準出力の最後を取り損ねることがあるため、最終行に標準出力の読み込みを追加しました)
== 変更履歴 ==
* 1.0.1 (2013-12-30)
** 稀に標準出力の最後を取り損ねることがあるため、最終行に標準出力の読み込みを追加しました
* 1.0.0 (2013-11-29)
** 初版


== ソースコード ==
== ソースコード ==
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript" copy>
/**
/**
  * シェルコマンドを実行する。
  * シェルコマンドを実行する。
43行目: 47行目:


// アウトプットバーにシェルコマンド実行結果を出力
// アウトプットバーにシェルコマンド実行結果を出力
outputbar.visible = true;
outputBar.visible = true;
outputbar.Clear();
outputBar.Clear();
while (exec.Status == 0) {
while (exec.Status == 0) {
outputbar.Write(exec.StdOut.ReadAll());
outputBar.Write(exec.StdOut.ReadAll());
sleep(100);
sleep(100);
}
}
outputbar.Write(exec.StdOut.ReadAll());
outputBar.Write(exec.StdOut.ReadAll());
</syntaxhighlight>
</syntaxhighlight>

2025年11月25日 (火) 19:13時点における最新版

概要[編集]

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

エディタの内容を標準入力経由でコマンドに渡して処理することもできます。

(テキストを選択してマクロ起動、実行コマンドに"sort | uniq"を指定するような使い方)

未だにテキスト処理にフィルタコマンドを多用する私くらいしか需要はないかなとは思いつつ、誰かに拾っていただければ幸いです。

変更履歴[編集]

  • 1.0.1 (2013-12-30)
    • 稀に標準出力の最後を取り損ねることがあるため、最終行に標準出力の読み込みを追加しました
  • 1.0.0 (2013-11-29)
    • 初版

ソースコード[編集]

/**
 * シェルコマンドを実行する。
 * 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());
スポンサーリンク