忍者ブログ

再帰フォルダ作成スクリプト(VBScript)の改良

2022年06月21日
前に書いた記事「デバッグログを出力するVBScript」で登場したフォルダ作成モジュールを改良したら思わぬ不具合が出てハマったお話。
※ 本文の「\」は半角の「¥」のことです。



そのモジュールmakeDirEX(Path)は、Pathで指定したフォルダを親フォルダから順に作る。
すでに作ってあればなにもしないという万能な処理。
フォルダ作成処理って、親フォルダがなかったり、すでに作られてたり
エラー要素が結構あるので、我ながら便利だと思う。
ただし、受け渡すパスを間違えるとやたら深いフォルダが作られる。。。

Pathで受け取った文字列を\でSplitして、要素の若い順にフォルダ有無を調べてなければ作る。NASのように\\で始まるPathは非対応だったけど、利便性のため改良することにした。

"\\"で始まるパスならNASと判断して、
パスから"\\"を除外して、basePath を"\\"に設定。
"\\"の次の文字から"\"区切りで順次フォルダ作成処理がされる。

当初、引数であるPathから"\\"を除外して処理していたが、
プロシージャの外に出ても"\\"が消えたままになってるし!!

引数は編集するな!が正解?


以下、ソース。




Sub makeDirEX(Path)
dim myPath,basePath
if left(myPath,2) = "\\" then
myPath = right(Path,len(Path)-2)
basePath = "\\"
else
myPath = Path
basePath = ""
end if
if right(myPath,1)="\" then myPath = left(myPath,len(myPath)-1) '\削除
Dim tmp, j , strDir
tmp = Split(myPath, "\")
With CreateObject("Scripting.FileSystemObject")
strDir = basePath & tmp(0) & "\"
If .FolderExists(strDir) = False Then errorEnd(strDir & "の作成はできません。")
For j = 1 To UBound(tmp)
strDir = strDir & tmp(j) & "\"
If .FolderExists(strDir) = False Then .CreateFolder strDir'なければ作る
Next
End With
End Sub

sub errorEnd(msg)
msgbox msg
Wscript.Quit
end sub







PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字