ディレクトリ存在判定No.05432
n13 さん 07/02/10 03:11
 
いつもお世話になっております。n13です。

標題の件ですが、秀丸マクロでディレクトリの存在を判定する方法を教えてください。
(ファイルの存在であれば existfile 関数で判定できます。)

どうしてディレクトリの存在を判定したいかというと、存在しないディレクトリパス
を grep 文に渡した場合、カレントディレクトリを grep してしまうためです。
カレントディレクトリがドライブのルートであったりすると、ひどい目にあってしま
います。

秀丸開発者様>
existdir なる関数を追加していただくよう要望いたします。
または、存在しないディレクトリパスを grep 文に渡した場合、grep がエラーで終
了する仕様に変更していただくだけでも構いません。(できればマクロではない gre
p の場合も)
ご検討の程、よろしくお願いします。

マクロエキスパート様>
ディレクトリを判定できる dll があれば教えていただけますでしょうか。

以上、よろしくお願いいたします。

[ ]
RE:05432 ディレクトリ存在判定No.05433
h-tom さん 07/02/10 06:01
 

h-tom です。

>標題の件ですが、秀丸マクロでディレクトリの存在を判定する方法を教えてください。
>(ファイルの存在であれば existfile 関数で判定できます。)
if(existfile(チェクしたいフォルダ名+"\\nul"){
    message "存在するフォルダです。";
}

あと、ステルス秀丸上にdirコマンドの結果を出力させ解析する。
dir /ad /b チェクしたいフォルダ名

>ディレクトリを判定できる dll があれば教えていただけますでしょうか。
田楽DLL

[ ]
RE:05433 ディレクトリ存在判定No.05434
n13 さん 07/02/10 12:37
 
n13 です。

h-tom 様>
ありがとうございました。解決しました。
(皆様のマクロ内によく見かける「nul」はそういう意味だったんですね!)

以上よろしくお願いいたします。

[ ]
RE:05434 ディレクトリ存在判定No.05435
n13 さん 07/02/12 03:39
 
n13です。

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

嘘でした。
existfile(${実在するファイルのパス} + "\\nul") の場合も、
existfile(${実在するディレクトリのパス} + "\\nul") の場合も、
true が返ってきてしまいます。

実在するファイルのパスを指定して grep を実行した場合も、カレントディレクトリ
を grep してしまうため、grep対象ディレクトリのチェックには使用できません。
(カレントディレクトリが「C:\」の状態で、存在しないディレクトリ名を指定して
grep置換・・・なんていう誤操作を思い浮かべると怖くて ver6.5 をインストールで
きません。)


h-tom様>

田楽DLL を試してみたいのですが、そちらはいわゆる「ソース嫁」という代物でしょ
うか?

以上、よろしくお願いします。

[ ]
RE:05435 ディレクトリ存在判定No.05436
h-tom さん 07/02/12 07:40
 

h-tom です。

>existfile(${実在するファイルのパス} + "\\nul") の場合も、
>existfile(${実在するディレクトリのパス} + "\\nul") の場合も、
>true が返ってきてしまいます。
本当だ。識別できませんね。

>実在するファイルのパスを指定して grep を実行した場合も、カレントディレクトリ
>を grep してしまうため、grep対象ディレクトリのチェックには使用できません。
存在するファイルのパスを渡して、grep文動作します?
"〜カレントフォルダの移動に失敗しました。"とエラーになりますが?
(ver.6.50β20)

>田楽DLL を試してみたいのですが、そちらはいわゆる「ソース嫁」という代物でしょ
>うか?
「マニュアル読め」です。

[ ]
RE:05435 ディレクトリ存在判定No.05437
山紫水明 さん 07/02/12 20:04
 
 n13さん,

  existfile( "フォルダ名\\*.*" )
  でできませんか?
                 では, (^^)/~
                                    山紫水明(ユーザー)
                                    SANSHISUIMEI

[ ]
RE:05437 ディレクトリ存在判定No.05438
h-tom さん 07/02/12 20:57
 

h-tom です。

>  existfile( "フォルダ名\\*.*" )
>  でできませんか?
おお、existfile関数って、ワイルドカード使えたんだ。
知らなかった。

[ ]
RE:05438 ディレクトリ存在判定No.05439
n13 さん 07/02/13 20:38
 
h-tom様>

>存在するファイルのパスを渡して、grep文動作します?
>"〜カレントフォルダの移動に失敗しました。"とエラーになりますが?
>(ver.6.50β20)

私の環境では誤動作します。(ver.6.06)
修正されたのでしょうか?

>>田楽DLL を試してみたいのですが、
>>そちらはいわゆる「ソース嫁」という代物でしょうか?
>「マニュアル読め」です。

すみません。
マニュアルが同胞されているのを見落としてました。(^^;


山紫水明様>

>  existfile( "フォルダ名\\*.*" )
>  でできませんか?

できました。
ファイルとディレクトリときっちり区別して判定してくれます。
ありがとうございました。


h-tom様、山紫水明様>

いろいろありがとうございました。
今後ともよろしくお願いいたします。

[ ]
RE:05439 ディレクトリ存在判定No.05440
h-tom さん 07/02/13 22:22
 

h-tom です。

>>存在するファイルのパスを渡して、grep文動作します?
>>"〜カレントフォルダの移動に失敗しました。"とエラーになりますが?
>>(ver.6.50β20)
>
>私の環境では誤動作します。(ver.6.06)
>修正されたのでしょうか?
Ver.6.07でも"〜カレントフォルダの移動に失敗しました。"とエラーになり
ますね。(OSはXPSP2)
Ver.6.06 --> Ver.6.07の修正見ると、grepで1件あるけど関係あるかな?

試したのは、以下のマクロ。
実行すると、検索の設定が変わるので、事前にメモしておいてください。
TEMPフォルダにあらかじめ、"a.txt"を作成してください。
//ここから
if(existfile(getenv("TMP")+ "\\a.txt")){
    grep "a", "*.*", getenv("TMP")+ "\\a.txt";
}
//ここまで

Ver.6.07にしても誤動作するなら、再現マクロつけて、秀丸エディタ会議室へ
行った方がいいでしょう。
(こっちだと秀丸担当さんが、気がつかないかもしれないから。)

[ ]
RE:05440 ディレクトリ存在判定No.05441
n13 さん 07/02/13 23:22
 
>Ver.6.07にしても誤動作するなら、再現マクロつけて、秀丸エディタ会議室へ
>行った方がいいでしょう。
>(こっちだと秀丸担当さんが、気がつかないかもしれないから。)

ver.6.07 に更新して試したところ、「カレントフォルダの移動に失敗しました。」
と出力されました。

ちなみに、上記メッセージが出るとマクロが終了します。
イマイチかゆい所に手が届かない仕様ですね。

----------------
// 設定を退避
$SB = searchbuffer;
$RB = replacebuffer;
$GB = grepfilebuffer;
#SO = searchoption;

// grepを実行
grep "foo", "*.bar", "存在しないディレクトリ";
##ret = result;

// まずは設定を復帰
setsearch   $SB, #SO;
setreplace  $RB;
setgrepfile $GB;

// エラー判定
if(##ret < 0){
    message "grepに失敗";
    endmacro;
} else if(##ret == 0) {
    message "該当0件";
    endmacro;
}

// 以下、grep後の処理
----------------

上記マクロを実行した場合、設定をきちんと復帰して「grepに失敗」と表示して欲し
いですよね。。。

[ ]
RE:05441 ディレクトリ存在判定No.05442
h-tom さん 07/02/14 00:27
 

h-tom です。

>ver.6.07 に更新して試したところ、「カレントフォルダの移動に失敗しました。」
>と出力されました。
>ちなみに、上記メッセージが出るとマクロが終了します。
>イマイチかゆい所に手が届かない仕様ですね。
こんなときには、"disableerrormsg"の出番ですが、効きませんね・・・。

"disableerrormsg"も、効く場合と、効かない場合の区別がよくわからない。
(文法エラー系には効かないってのはわかっているんだけど。)

[ ]
RE:05440 ディレクトリ存在判定No.05443
山紫水明 さん 07/02/14 17:54
 
 h-tomさん,

えーっと,何か違ったことかもしれませんが,

>if(existfile(getenv("TMP")+ "\\a.txt")){
>    grep "a", "*.*", getenv("TMP")+ "\\a.txt";
>}

if(existfile(getenv("TMP")+ "\\a.txt")){
    grep "a", "a.txt", getenv("TMP");
}
としたらどうでしょう。

     では, (^^)/~
                                        山紫水明
                                        SANSHISUIMEI

[ ]
RE:05442 ディレクトリ存在判定No.05444
n13 さん 07/02/14 23:24
 
>
>h-tom です。
>
>>ver.6.07 に更新して試したところ、「カレントフォルダの移動に失敗しました。」
>>と出力されました。
>>ちなみに、上記メッセージが出るとマクロが終了します。
>>イマイチかゆい所に手が届かない仕様ですね。
>こんなときには、"disableerrormsg"の出番ですが、効きませんね・・・。

ver.6.08に更新してみました。

ver.6.08でも同じく、
「カレントフォルダの移動に失敗しました。」⇒マクロの突然死

これはver.6.06⇒ver.6.07の仕様変更でしょうか?
それともバグ?

[ ]
RE:05443 ディレクトリ存在判定No.05445
n13 さん 07/02/14 23:27
 
> h-tomさん,
>
>えーっと,何か違ったことかもしれませんが,
>
>>if(existfile(getenv("TMP")+ "\\a.txt")){
>>    grep "a", "*.*", getenv("TMP")+ "\\a.txt";
>>}
>を
>if(existfile(getenv("TMP")+ "\\a.txt")){
>    grep "a", "a.txt", getenv("TMP");
>}
>としたらどうでしょう。
>
>     では, (^^)/~
>                                        山紫水明
>                                        SANSHISUIMEI

誤解させてすみません。
困りごとではなく、
秀丸マクロのgrep文に異常値を渡すテストの雑談でした。

[ ]
RE:05445 ディレクトリ存在判定No.05446
山紫水明 さん 07/02/15 07:30
 
 n13さん,h-tom さん,

>困りごとではなく、
>秀丸マクロのgrep文に異常値を渡すテストの雑談でした。

 すみません。余計な口出しでした。

     では, (^^)/~
                                        山紫水明
                                        SANSHISUIMEI

[ ]
RE:05444 ディレクトリ存在判定No.05447
h-tom さん 07/02/15 09:22
 

h-tom です。

>ver.6.08に更新してみました。
>
>ver.6.08でも同じく、
>「カレントフォルダの移動に失敗しました。」⇒マクロの突然死
>
>これはver.6.06⇒ver.6.07の仕様変更でしょうか?
>それともバグ?
仕様変更ですね。
 http://hidemaruo.dip.jp:81/turukame/turukame_3/x0611588.html

事前にチェックするか、"disableerrormsg"を効くようにしてもらうか
ですね。

[ ]