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) »