Buongiorno a tutti,
avrei bisogno di uno script (preferibilmente VBS, ma anche ASP o ASP.NET) o di un programma eseguibile per elencare l'albero delle sottocartelle di una cartella.
Potete aiutarmi?
Kisses,
Nat
Buongiorno a tutti,
avrei bisogno di uno script (preferibilmente VBS, ma anche ASP o ASP.NET) o di un programma eseguibile per elencare l'albero delle sottocartelle di una cartella.
Potete aiutarmi?
Kisses,
Nat
Qui si parla solo di VBS... per le altre tecnologie, ci sono gli appositi forum.
Ho spostato la discussione all'interno del forum dedicato a Visual Basic (VBx, VBA, ...) e ai linguaggi per .NET Framework (VB.NET, C#, ...).
Ciao!![]()
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Se n'è parlato da poco, in una discussione relativa all'eliminazione ricorsiva di files; in particolare il codice di ricerca ricorsiva che puoi facilmente adattare al tuo scopo è in questo post.
Amaro C++, il gusto pieno dell'undefined behavior.
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![]()
Ma se lo scopo è memorizzare in un file l'albero delle cartelle ti basta usare il comando shell tree, magari ridirezionandone l'output su un file.
Boh, a me pare di averla scritta il più elegante possibile... la funzione ricorsiva funziona benone in questi casi, pur aggiungendo un certo overhead a causa delle riscritture nello stack causate dalla ricorsione (ma si tratta comunque di un effetto trascurabile).1) il primo dubbio rimane sempre: esisterà un'implementazione più elegante?
Sposta l'aggiunta dell'indentazione: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
codice:Dim mFso, Drive, fList, strSpaces, strIndent Root = "c:\" Set mFso = CreateObject("Scripting.FileSystemObject") Set fList = mFso.CreateTextFile("C:\ElencoCartelle.txt", true) strSpazi = "" 'Occhio: qui il nome è sbagliato, anche se si tratta di un'istruzione trascurabile strIndent = " " ListFolders mFso.GetFolder(Root), strSpaces Set fList = Nothing Set mFso = Nothing Sub ListFolders(Fld, strSpazi) On Error Resume Next Dim strFolder, subFolder 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 strSpazi = strSpazi & strIndent ListFolders subFolder, strSpazi Next End If strSpazi = Left(strSpazi, Len(strSpazi) - Len(strIndent)) Next strSpazi = Left(strSpazi, Len(strSpazi) - Len(strIndent)) End Sub
Amaro C++, il gusto pieno dell'undefined behavior.
Ehm.... naturalmente mi riferivo alla mia, di implementazioneBoh, a me pare di averla scritta il più elegante possibile...
Grazie per l'errore, irrilevante e dunque più subdolo da rilevare....![]()