- 1 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/08/12(金) 13:15:41 ID:CYAxM25E0]
-
ここはリネームソフトや正規表現・スクリプト・マクロの記述法など、 ファイル名変更方法について『またーりと』語るスレです。 最強のリネームツール002 pc8.2ch.net/test/read.cgi/software/1066415777/ 最強のリネームソフト pc2.2ch.net/software/kako/1001/10015/1001544324.html
- 584 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/29(月) 09:42:24 ID:4eLwLnI10]
- >>582
★重大バグ@ #現象 ドライブルートにwrename.vbsを置くと、パスがD:\\〜などとなり、エディタで開けない事がある #原因 GetParentFolderNameは通常は末尾に\の付かないパス(D:\hoge\wrename.vbs→D:\hoge)を返し ドライブルート下のファイル、フォルダを指定すると\を付けたドライブレター(D:\wrename.vbs→D:\)を返すが その仕様に合わせた処理が取れていないため、"D:\"+"\"で\が二重になる #対処法 x=fs.GetParentFolderName(WScript.scriptfullname) if Right(x,1)<>"\" Then x=x+"\" や、IsRootFolderプロパティなどでの例外処理をする #コメント 実はD:\\というのは間違いってわけではく、スクリプト内(FileSystemObject)ではエラーにはならないけど エディタによっては開けないものもあるのでスクリプト側での対処は必須 ドライブルートに置く人は少ないだろうけど、ドライブルートに置くなという注意書きをしないなら対処すべき ★重大バグA #現象 シングルプロセスで複数のファイルを扱えるエディタだと、ファイルの編集を終了させてもリネームが開始されない #原因 Execオブジェクトの監視しかしていないから、ファイルの編集を終了させてもプロセスが終了しないと Do until hide.Statusのループを抜けられない #対処法 tempfileの更新日時を監視して、更新上書きされた時点でリネームを開始するなど #コメント 更新日時監視にする場合、上書き=編集終了とは限らないので、「内容が更新されました. リネームを開始しますか?」 などの確認をした方がいいかもしれないが、煩わしいと感じる人も居るかもしれないから確認の有無は選択式とか 因みに実行したアプリの終了待ちは、わざわざExecオブジェクトを監視しなくても WshShell.Runの第三引数をtrueにすると、そのアプリが終了するまで次の処理は行われない
- 585 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/29(月) 09:42:58 ID:4eLwLnI10]
- ★重大バグB
#現象 パス内にスペースが含まれているディレクトリ下にwrename.vbsを置くと、エディタで開けない事がある #原因 ""囲いが必要な部分で""囲いを行っていないから #対処法 set hide=WshShell.Exec(editer+" """+tempfile+"""") #コメント 変数editerの方のエスケープはユーザーにやらせるにしてもtempfileの方はコードで対処しておくべき 有る程度PC慣れしてる人は、スペースを含むディレクトリ名なんて作らないけど、 これもそういう注意書きをしていなければ、仕様ではなくバグになるので、対処は必要 エディタに因ってはスペースを含むパスを""囲いしなくても開ける物もあるが、開けない物も多いので 因みにこれは間違う人かなり多いんだが、エディターのスペルは最後erではなくorね ▲軽バグC #現象 msgbox errmsg+vbCrLf+CStr(errs)+"個のリネームをスキップしました" のerrmsgが必ず空になるので、エラーの内容がわからない #原因 変数errmsgの初出がmverrプロシージャであり、プロシージャレベル(関数内部)変数として扱われ 後のmsgboxの方ではグローバル(全体共通)変数扱いの別変数(新規変数)が呼ばれる #対処法 グローバルレベルでの変数の宣言、又はmverrが呼ばれる前にグローバルレベルでerrmsgに初期値("")を代入 一番良いのはOption Explicitで変数宣言の強制 #コメント プロシージャ内での変数の扱いは プロシージャレベル宣言あり→プロシージャレベル グローバルレベル宣言あり→グローバル グローバルレベルで使用済み→グローバル 未出→プロシージャレベル 上ほど優先度が高く、プロシージャレベル宣言があればグローバルレベル宣言もあったとしてもプロシージャレベル変数になる 逆にプロシージャ外での変数の扱いは、プロシージャレベルの同名変数の有無には影響されず、全てグローバル変数扱い
- 586 名前:名無しさん@お腹いっぱい。 mailto:sage [2007/01/29(月) 09:43:30 ID:4eLwLnI10]
-
「★重大バグ」は動作に支障が発生するもの、「▲軽バグ」は動作には問題ないが明らかにバグと言えるもの 他にもこうしたほうがいいって部分は結構あるけど、とりあえずバグが無ければそんなのはいいわな >>583 君が挙げたのは1つ目はバグだけど、2つ目は確かに仕様で、3つめは動作には支障のない軽バグだ 1つ目も「DR&Dでリネームするファイル名を指定するかsendtoにこのスクリプトを入れて"送る"で起動してください」 と書いていれば、D&Dや"送る"は基本的に親違いのファイルフォルダは送れないから、 コマンドラインから親違いのファイルを渡すという想定外の使用方法で問題が起きるのは仕様と言い切ることも出来るが コマンドラインで指定可能と書いてしまったら、これを仕様と言うことは出来なくなる ★重大バグ@、★重大バグ3も「ディレクトリ名にスペースを含まない、ドライブルート以外にスクリプトを置いてください」の 一文を加えることで、バグではなく仕様になる 仕様というのは、既に想定されていた動作のことを指すので、問題が起きることが想定されていたなら 「こういう問題があるが、対処出来ない(するのが面倒)なので、ユーザー側で回避してくれ」と書いておかなければ 後付けで「仕様です」と言うのは、バグを誤魔化す言い訳でしかなくなってしまう まぁ俺も自分で書いた物だと、凡ミスに気付かずバグ出して、他人から指摘されることも結構あると言うか バグを全然出さない奴なんてまず居ないが、バグを出したら素直に認めるこった 因みにsendto直置き問題は、親フォルダ名が"SendTo"なら、作成するファイルに隠しファイル属性を付けるようにすると解決する
|

|