#7069

Yutaka Emura
キーマスター

kshiさんは書きました:
簡単なDOSコマンドくらい気軽に実行したいと思って、
以下のようなマクロを書いてみました。

ファイルがすこし多目のフォルダをdirで表示しようとすると、
DOS窓を表示したまま固まってしまいます。
マウスでウィンドウを閉じる(×)と、アウトプットバーにちゃんと書き込まれます。

Sleep(100)で待機しているあたりに
もう一工夫いるのでしょうか。

#title = “DOSコマンド実行”
#tooltip = “DOSコマンドを実行し、結果をアウトプットバーに出力します。”

var sCmd
if ((sCmd = prompt(“input command:”, “”)) == “”) { QUit(); }
var wsh = new ActiveXObject(“WScript.Shell”);
wExec = wsh.Exec(“%ComSpec% /c ” + sCmd);
while (wExec.Status == 0) {
Sleep(100);
}
OutputBar.Visible = true;
OutputBar.SetFocus();
var t = new Array(80); OutputBar.writeln(t.join(“-“)); //区切り線
OutputBar.write(wExec.StdOut.ReadAll());
OutputBar.write(wExec.StdErr.ReadAll());

面白いですね。ループの中でも、StdOut をフラッシュしないといけないようですね。次のように変えてみるとうまくいくようです。

#title = “DOSコマンド実行”
#tooltip = “DOSコマンドを実行し、結果をアウトプットバーに出力します。”

var sCmd
if ((sCmd = prompt(“input command:”, “”)) == “”) { QUit(); }
var wsh = new ActiveXObject(“WScript.Shell”);
wExec = wsh.Exec(“%ComSpec% /c ” + sCmd + “n”);
OutputBar.Visible = true;
var t = new Array(80); OutputBar.writeln(t.join(“-“)); //区切り線
while (wExec.Status == 0) {
Sleep(100);
OutputBar.write(wExec.StdOut.ReadAll());
}
OutputBar.SetFocus();
OutputBar.write(wExec.StdOut.ReadAll());
OutputBar.write(wExec.StdErr.ReadAll());