◀マクロトップへ
  • 79 マクロ内でファイルの有無を検出したい
    • 80 Re:マクロ内でファイルの有無を検出したい
      • 81 Re2:マクロ内でファイルの有無を検出したい
        • 82 マクロ内でファイルの有無を検出できました
  • [79] マクロ内でファイルの有無を検出したい tsune 2004年05月23日 00:18

    こんばんは。tsuneです。

     マクロ内でファイルの有無を検出したいのですが、適当な方法はございませんでしょうか。
     下記のようにやってみましたが、Execの戻り値がファイルの有無で分かれてくれません。
     戻り値 dirchk が必ず 1 になってしまいます。
     Execの使い方が間違っているのでしょうか。

     よろしくお願いします。
     ところで、
     #70の「マクロの強制終了」はできないということでしょうか。

     d:\data\hogehoge.HTMLの有無で処理を分岐させたいのです。hogehogeの部分には、ファイル名に相当する変数が順次に放り込まれます。実際のマクロは、(処理色々)の部分に長々と処理内容が記載してあり、if文も実際には、もっと内容がありますが、見にくいだけなので省略しました。


    【マクロ】
    var
     str,str2:String; // 文字列変数宣言
     dirchk:Integer; // 整数数値変数 tp を用意 - 作業用

    begin // { 処理開始
      ・
      ・(処理色々)
      ・
     str := d:\data\hogehoge.HTM
     dirchk := Exec('html.bat',str,True);
     MessageBox(IntToStr(dirchk),'',1);
     if (dirchk = 1) then break
     else str2:="a";
      ・
      ・(処理色々)
      ・
    end;

    【html.bat】
    @echo off
    dir %1L /d | find "ファイルが見つかりません。"
    • [80] Re:マクロ内でファイルの有無を検出したい しみづ 2004年05月23日 12:31


       うーんと、例えばbuを使う方法でどうでしょう。
      http://hp.vector.co.jp/authors/VA000007/
       ここのリストの下から2番目のバイナリを適当な場所に解凍してください。

       そして
      var
      str,str2:String; // 文字列変数宣言
      dirchk:Integer; // 整数数値変数 tp を用意 - 作業用

      begin // { 処理開始
      str := 'fileline d:\data\hogehoge.HTM';
      dirchk := Exec('c:\ddd\bu.com',str,True);
      MessageBox(IntToStr(dirchk),'',1);
      if (dirchk = 255) then break
      else str2:='a';
      end;
      • [81] Re2:マクロ内でファイルの有無を検出したい しみづ 2004年05月23日 13:41


         ああ、でもロングファイル名がつかえないか。
         こっちのほうでいいのでは。


        var
        str,str2:String; // 文字列変数宣言
        dirchk:Integer; // 整数数値変数 tp を用意 - 作業用

        begin // { 処理開始
        str := '/c dir d:\data\hogehoge.HTML';
        dirchk := Exec('cmd.exe',str,True);
        MessageBox(IntToStr(dirchk),'',1);
        if (dirchk = 1) then break
        else str2:='a';
        end;
        • [82] マクロ内でファイルの有無を検出できました tsune 2004年05月23日 16:11

          しみづ さん

           御教示ありがとうございました。
           2つ目にお教え戴いた方法でうまくいきました。下記のように、括弧の中にパラメータを直に入れましたが、問題無いようです。

           dirchk := Exec('cmd.exe','/c dir '+str+'L',True);

           要するに、dirの戻り値(終了コード))は、ファイルが見つからないときに 1 になるのですね。
           素人考えで、下手にパイプを使おうとしたのが、間違いでした。つい最近、別のソフトでパイプを使う必要のある例を教えて戴いたものですから、dirの終了コードを確かめもしないで、同じことをやる必要があるとの思い込みでした。

          P.S.
           OSその他環境を一切書いてませんでした。申し訳ありません。
           Windows2000sp4でした。