Ordnerstruktur Script mit Logfile!
Hallo, ich bin neu hier und brauche unbedingt eure Hilfe!
Ich habe ein Script erstellt welches von einem angegeben Ordner die Unterordner und Dateien (Name und Größe) in eine Logdatei schreibt.
Nur die Dateinamen in den Unterordnern werden nicht geschrieben, ich weis nicht wie ich das einbinden kann.
Ich hoffe Ihr könnt mir helfen!
lg chris
Dim Ordnername, oFile
Ordnername = "C:\AddOn2"
Set fso = CreateObject("Scripting.FileSystemObject")
' Log Datei erstellen
Set oFile = fso.OpenTextFile("C:\" & Date() & ".log",8,true)
' Referenz auf ein Verzeichnis holen
Set Verzeichnis = FSO.GetFolder(Ordnername)
' Ausgabe in Protokoll
oFile.WriteLine "Kopierte Daten vom " & Now()
oFile.WriteLine "-- Dateien:"
' Alle Dateien
For Each Datei In Verzeichnis.Files
Next
oFile.WriteLine " "
oFile.WriteLine "-- Ordner:"
' Alle Unterverzeichnisse
For Each UnterVerzeichnis In Verzeichnis.SubFolders
Next
For Each Datei in Unterordner.Files
Next
oFile.WriteLine " "
oFile.WriteLine " "
oFile.WriteLine " "
oFile.Close
Ich habe ein Script erstellt welches von einem angegeben Ordner die Unterordner und Dateien (Name und Größe) in eine Logdatei schreibt.
Nur die Dateinamen in den Unterordnern werden nicht geschrieben, ich weis nicht wie ich das einbinden kann.
Ich hoffe Ihr könnt mir helfen!
lg chris
Dim Ordnername, oFile
Ordnername = "C:\AddOn2"
Set fso = CreateObject("Scripting.FileSystemObject")
' Log Datei erstellen
Set oFile = fso.OpenTextFile("C:\" & Date() & ".log",8,true)
' Referenz auf ein Verzeichnis holen
Set Verzeichnis = FSO.GetFolder(Ordnername)
' Ausgabe in Protokoll
oFile.WriteLine "Kopierte Daten vom " & Now()
oFile.WriteLine "-- Dateien:"
' Alle Dateien
For Each Datei In Verzeichnis.Files
oFile.WriteLine " "
oFile.WriteLine "-- Ordner:"
' Alle Unterverzeichnisse
For Each UnterVerzeichnis In Verzeichnis.SubFolders
For Each Datei in Unterordner.Files
oFile.WriteLine " "
oFile.WriteLine " "
oFile.WriteLine " "
oFile.Close
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 96349
Url: https://administrator.de/contentid/96349
Ausgedruckt am: 26.11.2024 um 10:11 Uhr
9 Kommentare
Neuester Kommentar
hallo,
ich hab mich mal dran probiert und nach langem hin und her ein (nicht ganz saubere) Lösung gefunden:
ich hab mich mal dran probiert und nach langem hin und her ein (nicht ganz saubere) Lösung gefunden:
Function GetSubFolders(Pfad)
Set Verzeichnis = FSO.GetFolder(Pfad)
Set UnterVerzeichnis = Verzeichnis.SubFolders
'On Error Resume Next
For Each Ordner In UnterVerzeichnis
WriteLog2 Ordner
GetSubFolders Ordner.Path
Next
End Function
Function WriteLog1(Pfadangabe)
Dim Ordnername, oFile
Set oFile = FSO.OpenTextFile("C:\" & Date() & ".log",8,true)
Set Ordner = FSO.GetFolder(Pfadangabe)
oFile.WriteLine "Kopierte Daten vom " & Now()
oFile.WriteLine " "
oFile.WriteLine "-> " & Ordner.Name & " || Größe: " & Round(Ordner.Size/1024,2) & " Kilobytes"
For Each Datei In Ordner.Files
oFile.WriteLine "|-> " & Datei.Name & " || Größe: " & Round(Datei.Size/1024,2) & " Kilobytes"
Next
oFile.WriteLine " "
oFile.Close
End Function
Function WriteLog2(Ordner)
Dim Ordnername, oFile
Set oFile = FSO.OpenTextFile("C:\" & Date() & ".log",8,true)
Set Ordner = FSO.GetFolder(Ordner)
oFile.WriteLine "-> " & Ordner.Name & " || Größe: " & Round(Ordner.Size/1024,2) & " Kilobytes"
For Each Datei In Ordner.Files
oFile.WriteLine "|-> " & Datei.Name & " || Größe: " & Round(Datei.Size/1024,2) & " Kilobytes"
Next
oFile.WriteLine " "
oFile.Close
End Function
Set FSO = CreateObject("Scripting.FileSystemObject")
' HIER DEN ORDNER ANGEBEN !!
Pfadangabe = "C:\Windows\Temp"
' HIER DEN ORDNER ANGEBEN !!
WriteLog1 Pfadangabe
GetSubFolders Pfadangabe
Hallo chrizz-at und willkommen im Forum!
Abgesehen davon, dass Du Dich zwischen den Variablennamen "UnterVerzeichnis" (Zeile 25) und "UnterOrdner" (Zeile 28) entscheiden solltest, kann das nur klappen, wenn die Behandlung der "UnterOrdner.Files" ebenfalls in einer Schleife stattfindet - dazu das "Next" aus Zeile 27 unter das "Next" aus Zeile 30 verschieben.
Grüße
bastla
P.S.: Wenn Du Dein Script beim Posten zwischen < code>< /code>-Tags platzierst (natürlich ohne die Leerzeichen), lassen sich die genannten Zeilennummern viel leichter zuordnen ...
P.P.S.: Falls Du nicht nur die erste Unterverzeichnis-Ebene dokumentieren willst, benötigst Du eine Rekursion - siehe dazu die oben geposteten Scripts.
Abgesehen davon, dass Du Dich zwischen den Variablennamen "UnterVerzeichnis" (Zeile 25) und "UnterOrdner" (Zeile 28) entscheiden solltest, kann das nur klappen, wenn die Behandlung der "UnterOrdner.Files" ebenfalls in einer Schleife stattfindet - dazu das "Next" aus Zeile 27 unter das "Next" aus Zeile 30 verschieben.
Grüße
bastla
P.S.: Wenn Du Dein Script beim Posten zwischen < code>< /code>-Tags platzierst (natürlich ohne die Leerzeichen), lassen sich die genannten Zeilennummern viel leichter zuordnen ...
P.P.S.: Falls Du nicht nur die erste Unterverzeichnis-Ebene dokumentieren willst, benötigst Du eine Rekursion - siehe dazu die oben geposteten Scripts.
@Iwan
Mein Ansatz sähe ähnlich aus:
Grüße
bastla
[Edit] Ausgabe der Ordnergröße ergänzt [/Edit]
Mein Ansatz sähe ähnlich aus:
Ordnername = "C:\AddOn2"
Set fso = CreateObject("Scripting.FileSystemObject")
' Log Datei erstellen
Set oFile = fso.OpenTextFile("C:\" & Date & ".log",8,true)
' Referenz auf ein Verzeichnis holen
Set Verzeichnis = fso.GetFolder(Ordnername)
' Ausgabe in Protokoll
oFile.WriteLine "Kopierte Daten vom " & Now
'Rekursion starten
DoFolders Verzeichnis
'Log abschließen
oFile.WriteBlankLines 3
oFile.Close
Sub DoFolders(V)
oFile.WriteLine "-- Ordner: " & V.Path
oFile.WriteLine "--> " & V.Name & " || Größe: " & Round(V.Size/1024,2) & " Kilobytes"
' Alle Dateien
For Each Datei In V.Files
oFile.WriteLine "--> " & Datei.Name & " || Größe: " & Round(Datei.Size/1024,2) & " Kilobytes"
Next
oFile.WriteLine
' Alle Unterverzeichnisse
For Each UnterVerzeichnis In V.SubFolders
DoFolders UnterVerzeichnis
Next
End Sub
bastla
[Edit] Ausgabe der Ordnergröße ergänzt [/Edit]
@Iwan
"Sparsamer" trifft's vielleicht eher (ich habe einfach die Extraschleife für die Dateien im Ausgangsordner eingespart); letztlich sehe ich es aber eigentlich so wie Du: nicht der Weg ist hier das Ziel ...
Grüße
bastla
"Sparsamer" trifft's vielleicht eher (ich habe einfach die Extraschleife für die Dateien im Ausgangsordner eingespart); letztlich sehe ich es aber eigentlich so wie Du: nicht der Weg ist hier das Ziel ...
Grüße
bastla
Hallo Iwan!
Die Darstellung mit Tausenderpunkten ist in der obigen Schreibweise von den Einstellungen der Systemsteuerung übernommen - um die Tausendertrennzeichen zu erzwingen:
Grüße
bastla
kriegt man da irgendwie noch tausender Punkte mit rein?
Wenn ohnehin nicht mehr mit den Ergebnissen gerechnet wird, kann auch gleich noch das Runden mit "FormatNumber()" erledigt werden:FormatNumber(Datei.Size/1024,2)
FormatNumber(Datei.Size/1024,2,,,True)
bastla