Mille grazie per il suggerimento
Modificando opportunamente lo script, ho risolto così:
Ho naturalmente modificato opportunamente la visita dell'albero per poter gestire l'indentazione.codice:Dim mFso, Drive, fList, strSpaces, strIndent Root = "c:\" Set mFso = CreateObject("Scripting.FileSystemObject") Set fList = mFso.CreateTextFile("C:\ElencoCartelle.txt", true) strSpaces = "" strIndent = " " ListFolders mFso.GetFolder(Root), strSpaces Set fList = Nothing Set mFso = Nothing Sub ListFolders(Fld, strSpazi) On Error Resume Next Dim strFolder, subFolder strSpazi = strSpazi & strIndent fList.WriteLine(strSpazi & Fld) 'Imposta la variabile strFolder sulla cartella corrente 'Enumera le cartelle contenute For Each strFolder In Fld.Subfolders strSpazi = strSpazi & strIndent fList.WriteLine(strSpazi & strFolder) If strFolder.SubFolders.Count > 0 Then For Each subFolder In strFolder.SubFolders 'Processa la sottocartella ListFolders subFolder, strSpazi Next End If strSpazi = Left(strSpazi, Len(strSpazi) - Len(strIndent)) Next strSpazi = Left(strSpazi, Len(strSpazi) - Len(strIndent)) End Sub
Rimangono aperti due problemi:
1) il primo dubbio rimane sempre: esisterà un'implementazione più elegante?
2) problema problema problema: viene messa l'indentazione anche alla cartella root. Un modo per risolverlo, SENZA mettere un fastidioso "If" che vede se la cartella è la root e SENZA inserire nel codice chiamante il For Each...Next relativo alle sottocartelle, rinunciando all'elegante ListFolders mFso.GetFolder(Root), strSpaces ? A me sembra che non esista![]()


Rispondi quotando