再帰フォルダ作成スクリプト(VBScript)の改良
2022年06月21日
前に書いた記事「デバッグログを出力するVBScript」で登場したフォルダ作成モジュールを改良したら思わぬ不具合が出てハマったお話。
※ 本文の「\」は半角の「¥」のことです。
そのモジュールmakeDirEX(Path)は、Pathで指定したフォルダを親フォルダから順に作る。
すでに作ってあればなにもしないという万能な処理。
フォルダ作成処理って、親フォルダがなかったり、すでに作られてたり
エラー要素が結構あるので、我ながら便利だと思う。
ただし、受け渡すパスを間違えるとやたら深いフォルダが作られる。。。
Pathで受け取った文字列を\でSplitして、要素の若い順にフォルダ有無を調べてなければ作る。NASのように\\で始まるPathは非対応だったけど、利便性のため改良することにした。
"\\"で始まるパスならNASと判断して、
パスから"\\"を除外して、basePath を"\\"に設定。
"\\"の次の文字から"\"区切りで順次フォルダ作成処理がされる。
当初、引数であるPathから"\\"を除外して処理していたが、
プロシージャの外に出ても"\\"が消えたままになってるし!!
引数は編集するな!が正解?
以下、ソース。
※ 本文の「\」は半角の「¥」のことです。
そのモジュールmakeDirEX(Path)は、Pathで指定したフォルダを親フォルダから順に作る。
すでに作ってあればなにもしないという万能な処理。
フォルダ作成処理って、親フォルダがなかったり、すでに作られてたり
エラー要素が結構あるので、我ながら便利だと思う。
ただし、受け渡すパスを間違えるとやたら深いフォルダが作られる。。。
Pathで受け取った文字列を\でSplitして、要素の若い順にフォルダ有無を調べてなければ作る。NASのように\\で始まるPathは非対応だったけど、利便性のため改良することにした。
"\\"で始まるパスならNASと判断して、
パスから"\\"を除外して、basePath を"\\"に設定。
"\\"の次の文字から"\"区切りで順次フォルダ作成処理がされる。
当初、引数であるPathから"\\"を除外して処理していたが、
プロシージャの外に出ても"\\"が消えたままになってるし!!
引数は編集するな!が正解?
以下、ソース。
PR
指定したテキストファイルの文字列を置換して、別名保存(上書き)するVBScript
2022年06月18日
定期的な作業で、文字列を置換してコマンドを実行することが結構ある。
例えばログ取得。YYYYMMなど、年月の部分を書き換えて
SQLで実行したり、コマンドプロンプトで取得したり。
手作業で日付を変えるのがめんどくさいので、
置換するvbscriptを作ってみた。
前に学習した文字列で複数の引数を受け渡す仕様に。
視認性を上げるために、区切り文字は「■」に設定。
本当は出力ファイルの存在チェックをして、
ない場合はエラーにする処理をいれるべきなんだけど、今回は割愛。
※ 意図しないところが置換されないようキーワードで事前検索を
以下、ソース。テキストファイルの ダウンロード。
例えばログ取得。YYYYMMなど、年月の部分を書き換えて
SQLで実行したり、コマンドプロンプトで取得したり。
手作業で日付を変えるのがめんどくさいので、
置換するvbscriptを作ってみた。
前に学習した文字列で複数の引数を受け渡す仕様に。
視認性を上げるために、区切り文字は「■」に設定。
本当は出力ファイルの存在チェックをして、
ない場合はエラーにする処理をいれるべきなんだけど、今回は割愛。
※ 意図しないところが置換されないようキーワードで事前検索を
以下、ソース。テキストファイルの ダウンロード。
デバッグログを出力するVBScript
2022年05月22日
VBScriptを作ってると、デバッグ機能が欲しくなる。
開発環境がなくてメモ帳(otbedit)ベースなので、できることはメッセージボックスで表示。
けど、ループ中にメッセージボックス入れようものなら、
毎回メッセージボックスが出てたまらん。
てな理由からログファイルを出力するVBScriptを作ってみた。
記事を書くときに調べてみたら、有償ソフトでデバッグ環境あんのね。。。
無償トライアル版もあるらしい。今度使ってみよう。
https://www.depthbomb.net/?p=2708#toc6
気を取り直して、デバッグログを出力する仕様について
VBAだとdebug.print(Text)の形式だったので、
DebugText(Text)でログファイルにTextを吐き出す仕様にした。
出力先は定数で設定可能に。して、
該当のフォルダやファイルがなければ
call makeDirEX(Path)で自動的に作成。
実行中のスクリプトファイル名と開始日時を取得して
Textと合わせて書き込む。
ファイル名取得はここを参考に。てか1行かよ!
https://bayashita.com/p/entry/show/174
以下、ソース。
開発環境がなくてメモ帳(otbedit)ベースなので、できることはメッセージボックスで表示。
けど、ループ中にメッセージボックス入れようものなら、
毎回メッセージボックスが出てたまらん。
てな理由からログファイルを出力するVBScriptを作ってみた。
記事を書くときに調べてみたら、有償ソフトでデバッグ環境あんのね。。。
無償トライアル版もあるらしい。今度使ってみよう。
https://www.depthbomb.net/?p=2708#toc6
気を取り直して、デバッグログを出力する仕様について
VBAだとdebug.print(Text)の形式だったので、
DebugText(Text)でログファイルにTextを吐き出す仕様にした。
出力先は定数で設定可能に。して、
該当のフォルダやファイルがなければ
call makeDirEX(Path)で自動的に作成。
実行中のスクリプトファイル名と開始日時を取得して
Textと合わせて書き込む。
ファイル名取得はここを参考に。てか1行かよ!
https://bayashita.com/p/entry/show/174
以下、ソース。
更新日時を付与するVBSを修正
2022年04月29日
昨日の記事で触れた更新日時を付与するVBScript触ってて気づいた。
更新日時を名前に付与って、ファイルだけじゃなくてフォルダにもやりたいよね。
ドラッグドロップしたファイルを印刷するVBScriptをネットで拾ってきて
それをベースに作ってたせいでフォルダ非対応になってたので
修正してみた。
Inputがファイルかフォルダかは事前にわかってるので、
名前を決める処理とリネーム処理の部分をフォルダに対応するだけ。
すっきりしないソースになっちゃったけど、動いたからいいや。
参考にしたサイト
'ドラッグドロップでファイルを印刷するスクリプト
'http://chuckischarles.hatenablog.com/entry/2018/10/29/002921
'ファイル名の末尾に更新日時を付与するVBScript
'http://gren-dken.hatenablog.com/entry/2013/08/22/000119
以下ソース。
更新日時を名前に付与って、ファイルだけじゃなくてフォルダにもやりたいよね。
ドラッグドロップしたファイルを印刷するVBScriptをネットで拾ってきて
それをベースに作ってたせいでフォルダ非対応になってたので
修正してみた。
Inputがファイルかフォルダかは事前にわかってるので、
名前を決める処理とリネーム処理の部分をフォルダに対応するだけ。
すっきりしないソースになっちゃったけど、動いたからいいや。
参考にしたサイト
'ドラッグドロップでファイルを印刷するスクリプト
'http://chuckischarles.hatenablog.com/entry/2018/10/29/002921
'ファイル名の末尾に更新日時を付与するVBScript
'http://gren-dken.hatenablog.com/entry/2013/08/22/000119
以下ソース。
フォルダがなければ作るスクリプト
2022年03月29日
xcopyコマンドを使ったログ回収について書いたけど、
xcopyってコピー先のフォルダがないとエラーを吐くのがいまいち。
そういえば、前にフォルダがなければ作るマクロを作ったよな。。。
てなわけで、VBAのソースをVBScriptに移植することにした。
元ソースは、マイドキュメントにフォルダがなければ作るマクロ
前に作ったときは、ユーザーフォルダを取得するのにガチャガチャやってたけど、
フォルダがなければ作る処理だけなら20行いかないのね。
VBAとの違いは、変数の型を指定できないこと。
for ~ next の後にループ変数を入力できないこと。
sub ~ end subの記載のない部分が実行されること。
思った以上に簡単に移植できた。
xcopyのコマンドを作る際に、コピー先フォルダをこれで作っておけば便利かも。
以下、ソースを「MakeDirEX.vbs」などの名前で保存。
コマンドプロンプトなら「mkdir -p 」でいいんじゃね?って話はなしで!!
xcopyってコピー先のフォルダがないとエラーを吐くのがいまいち。
そういえば、前にフォルダがなければ作るマクロを作ったよな。。。
てなわけで、VBAのソースをVBScriptに移植することにした。
元ソースは、マイドキュメントにフォルダがなければ作るマクロ
前に作ったときは、ユーザーフォルダを取得するのにガチャガチャやってたけど、
フォルダがなければ作る処理だけなら20行いかないのね。
VBAとの違いは、変数の型を指定できないこと。
for ~ next の後にループ変数を入力できないこと。
sub ~ end subの記載のない部分が実行されること。
思った以上に簡単に移植できた。
xcopyのコマンドを作る際に、コピー先フォルダをこれで作っておけば便利かも。
以下、ソースを「MakeDirEX.vbs」などの名前で保存。
コマンドプロンプトなら「mkdir -p 」でいいんじゃね?って話はなしで!!