« アプリやバッチファイルを非表示で起動するバッチファイル | トップページ | WSHの引数で二重引用符 " をエスケープするには?(その2) »

2008年11月24日 (月)

CreateFolder() フォルダを再帰的に作成する関数

FileSystemObjectのCreateFolder()メソッドは、
指定したフォルダが既に存在していた場合は、エラーが発生します。
また、親フォルダが存在しない場合も、エラーが発生します。

そこで、これらの面倒を解消した代替関数を作ります。

Option Explicit
Dim fso
Set fso=CreateObject("Scripting.FileSystemObject")

Sub CreateFolder(ByVal Folder)
Dim ParentFolder
'WScript.Echo Folder
ParentFolder=fso.GetParentFolderName(Folder)
If ParentFolder<>"" Then If Not fso.FolderExists(ParentFolder) Then CreateFolder ParentFolder
If Not fso.FolderExists(Folder) Then fso.CreateFolder Folder
End Sub

CreateFolder "c:\a\b\c\d"
CreateFolder "x:\a\b\c\d"
CreateFolder "c:a"
CreateFolder "x:a"
CreateFolder "a\b"

再帰処理は、無限ループにならないよう、歯止めが必要です。
ここでは、If ParentFolder<>"" が歯止めになっています。
もし、この歯止めがないと、存在しないドライブ(x:)で無限ループします。
WScript.Echo Folder でログを取ると、無限ループの様子がよく分かります。

« アプリやバッチファイルを非表示で起動するバッチファイル | トップページ | WSHの引数で二重引用符 " をエスケープするには?(その2) »