runexの挙動についてNo.06502
yanada さん 11/01/10 14:16
 
こんにちわ。

runexからバッチファイルを起動すると、コマンドプロンプト起動と異なる結果にな
りました、ご確認をお願いできませんでしょうか。

(コマンドプロンプトの結果:test.batを直接起動)
指定されたドライブが見つかりません。
C:\Program Files\Hidemaru

(マクロから実行した結果:マクロ経由でtest.batを起動)
C:\Program Files\Hidemaru
指定されたドライブが見つかりません。


メッセージの上下(前後)が逆になりました。
runexの引数を変更して試行錯誤はしてみたのですが駄目でした。

バッチファイルを起動するだけのマクロ
---- test.mac ここから ----
newfile;
$$cmd = "test.bat";
runex "cmd /C" + $$cmd, 1,
 1, "",
 1, "",
 1, "",
 0, "",
 2, 1, 0;
---- ここまで ----

存在しないディレクトリへ移動するバッチです。q:ドライブはそちらの環境に合わせ
て書き換えてください。
---- test.bat ここから ----
@echo off
cd q:
cd
---- ここまで ----

(動かし方)
test.macとtest.batは同じディレクトリにおいてください。

(環境)
windows vista
秀丸エディタ v8.03 b8

[ ]
RE:06502 runexの挙動についてNo.06505
秀丸担当 さん 11/01/11 12:20
 

>runexからバッチファイルを起動すると、コマンドプロンプト起動と異なる結果にな
>りました、ご確認をお願いできませんでしょうか。

報告ありがとうございます。
試してみたところ、確かにそうなることが確認できました。
この出力は標準出力と標準エラー出力に分かれているようで、この2つは非同期
的に処理されるので、そうなってしまう場合もあるようです。

秀丸エディタは2つのバッファのどちらかが取得できる場合、標準出力を先に取
得していました。
どっちか素早いほうを処理するというようなことをするとある程度近づけること
はできるかもしれないですが、確実なことはできないと思います。

原則的に標準出力と標準エラー出力は全く別のバッファということで、仕方ない
かもしれません。
例えば、コマンドプロンプトで
test.bat |more
とかしても結果が崩れたりすることもあるようです。

[ ]
RE:06505 runexの挙動についてNo.06507
yanada さん 11/01/12 00:14
 
確かに、標準入出力はバッファリングされているので、出力されるタイミングが異な
る可能性があります。
バッチを使わない別の方法を試してみることにします。

ありがとうございました。

[ ]