vbscript内の再帰に関する専門家の洞察を探しています。オンラインで見つかったさまざまな例から、次のコードを作成しました。これは、ちなみに機能します。
- http://saltwetbytes.wordpress.com/2010/05/04/vbscript-grabbing-subfolders-recursively/
http://technet.microsoft.com/en-us/library/ee198872.aspx
Function GetAllSubFolders(RootFolder, ByRef pSubfoldersList) Dim fso, SubFolder, root Set fso = CreateObject("scripting.filesystemobject") set root = fso.getfolder(RootFolder) For Each Subfolder in root.SubFolders If pSubFoldersList = "" Then pSubFoldersList = Subfolder.Path Else pSubFoldersList = pSubFoldersList & "|" & Subfolder.Path End If GetAllSubFolders Subfolder, pSubFoldersList Next GetAllSubFolders = pSubFoldersList End Function
私の質問は次のとおりです。再帰関数を作成する場合(以前の結果を格納するためのパラメーターを使用する場合)、これは良いアプローチですか?
私はこれを(自己完結型の)「関数」に入れることを好みます。そのため、プロシージャは結果としてサブサブフォルダを返します。しかし、見つかった例のほとんどは「サブ」を使用しています。「サブ」と「関数」に関しては常に混乱します(関数を使用するものを返す必要があるプロシージャが必要な場合は理解していますが、これはこの例の場合)しかし、「sub」を使用して、出力パラメーター(ByRef pSubfoldersList)を単純に参照することもできます。
では、ベストプラクティスは何ですか、それともまったく異なるアプローチをすべて一緒に使用する方がよいのでしょうか。(関数は、この例も[shell.exec "cmd / c dir RootFolder / s / b / a:d"]と比較して非常に遅いです。これは再帰の副作用であるか、FSOが実際にあるのではないかと思います。スロー?)