コマンドプロンプトを起動するマクロNo.03110
ませま さん 02/04/13 21:16
 
コマンドプロンプトを起動するマクロがライブラリになかったので
公開しようと思っています.

そこで,知恵を借りたいのだけど,基本的には

  run "cmd.exe";

とか start とかで終わりだけど,Windows の 95 系と NT 系では
コマンドが異なるので,これを判断してやろうと思います.

目下の基本方針は cmd.exe の存在をチェックして,無かったら 95 と判断
することにしているけど,我が家の Win98 には何故か command.com が
 c:\command.com と c:\windows\command.com の2つもありました(^^?

こうなるとファイルの存在でチェックという方法は,にわかに信用できない
気がします.特にアップデート版のOSとか,マルチブートの場合などは
どうなるのかよくわかりません.

何か確実でエレガントな方法はないでしょうか?
以下は,現在の草案マクロです.秀丸のバージョンチェックが必要かも
わかりません.以上よろしくお願いします.

// コマンドプロンプト起動マクロ - 0.01b1
// Windows95/98/Me のときは command.com
// WindowsNT/2K/XP のときは cmd.exe
Init:
    $sh_nt = winsysdir + "\\cmd.exe";
    $cmd_opt = "/k cd \"" + directory + "\"";
    $cmommand_opt = "/k cd \"" + directory + "\"";
Main:
    if( existfile($sh_nt) ) {
        run "cmd.exe " + $cmd_opt;
        if( result == false ) call Error;
    } else {
        run "command.com " + $cmommand_opt;
        if( result == false ) call Error;
    };
    endmacro;

Error:
    message "コマンドプロンプトの起動に失敗しました.\n"
          + "がっかりです.\n"
          + "最新版の秀丸なら大丈夫かもわかりません.\n";
    return;

[ ]
RE:03110 コマンドプロンプトを起動するマNo.03111
ひろ さん 02/04/14 02:08
 
 ませまさん今日は、ひろです。
> 目下の基本方針は cmd.exe の存在をチェックして,無かったら 95 と判断
> することにしている
 実際には末尾のような方法でどうでしょうか? 要は、おそらく環境変数で
指定してあると思うので、コマンドプロンプトで set コマンドを使って、適
当な環境変数が何であるか調べ、それをマクロの getenv で取得すれば良い
と思います。
//-------------------------------------------------------------------
$shell = getenv( "SHELL" );//ユーザが独自に設定しているかも
if( $shell == "" )$shell = getenv( "COMSPEC" );//NT も同じか不安

[ ]
RE:03111 コマンドプロンプトを起動するマNo.03112
ませま さん 02/04/14 07:45
 
> 実際には末尾のような方法でどうでしょうか? 要は、おそらく環境変数で
>指定してあると思うので、コマンドプロンプトで set コマンドを使って、適
>当な環境変数が何であるか調べ、それをマクロの getenv で取得すれば良い
>と思います。
ませまです.
いつもどうもです.

教えてもらったコードで我が家の W2k, W98 ともに正常に動作しました.
COMSPEC は NT 系も大丈夫らしいです.
コードもスッキリしたし,環境依存の問題も大丈夫そうです(たぶん)

ちなみに,我が家のマシンになぜか2つもあった command.com は
set | find /i "comspec"
として検索したら c:\command.com の方がヒットしました.
よくわからないけど,こっちが本物(?)らしいです.

とりあえず,下のコードで公開し,ユーザの反応を参考に例外対策をして
いこうと思います.

// ---( B E G I N   M A C R O ) ------------------------------------
// コマンドプロンプト起動マクロ - 0.01 by Masema
// Windows95/98/Me のときは command.com
// WindowsNT/2K/XP のときは cmd.exe
Init:
    // 環境変数 COMSPEC を調べて cmd.exe か command.com かを判断
    $shell = getenv( "SHELL" ); //ユーザが独自に設定しているかも
    if( $shell == "" ) $shell = getenv( "COMSPEC" );

    // 起動オプションを設定
    $option = "/k cd \"" + directory + "\"";

Main:
    run $shell + " " + $cmd_opt;
    if( result == false ) call Error;
    endmacro;

Error:
    message "コマンドプロンプトの起動に失敗しました.\n"
          + "がっかりです.\n"
          + "最新版の秀丸なら大丈夫かもわかりません.\n";
    return;
// ---( E N D   M A C R O ) ----------------------------------------

[ ]