Besitzer von Ordnern UND Dateien mit vbs in excel ausgeben
Hallo!
Ich müsste eine Script erstellen, dass alle Ordner und dessen Inhalte in einem Verzeichnis + deren Besitzerinformationen in ein excel File ausgibt. Habe hierzu schon ein paar (ältere) Threats gefunden, die mich fast auf die richtige Lösung gebracht haben (Besitzer von Ordnern mit VB-Script auslesen).
Dies ist der Code, den ich aus dem oben genannten Threat kopiert habe:
ordner = "C:\Downloads"
Liste = "C:\Liste.csv"
Set fs = CreateObject("Scripting.FileSystemObject")
Set f1 = fs.GetFolder(ordner)
If fs.FileExists(Liste) Then fs.DeleteFile(Liste)
Set WshShell = CreateObject("WScript.Shell")
For Each unterordner In f1.Subfolders
listunter = listunter & unterordner & vbcrlf
CMD = "cmd /c for /f ""skip=7 tokens=4*"" %a in ('dir """ & unterordner & """/q^|findstr /v ""Datei(en) Verzeichnis(se)""') do @echo %a;%b"
besitzer = WshShell.Exec(CMD).StdOut.ReadAll
listunter = listunter & besitzer & vbcrlf
Next
fs.CreateTextFile(Liste).Write listunter
Weiters wäre es von Vorteil, wenn die Dateibezeichnung des ausgegebene Files immer als Präfix das jeweilige Erstellungsdatum hätte. Beispiel: "2012 11 20 Liste.csv"
Leider habe ich keine Ahnung, wie ich dies in den Code oben einbauen sollte.
Bin leider nicht sooo vertraut mit der Materie und komme einfach nicht auf die richtige Lösung -.-
Vielleicht kann mir hierzu jemand helfen?
Lg
Pretznbär
Ich müsste eine Script erstellen, dass alle Ordner und dessen Inhalte in einem Verzeichnis + deren Besitzerinformationen in ein excel File ausgibt. Habe hierzu schon ein paar (ältere) Threats gefunden, die mich fast auf die richtige Lösung gebracht haben (Besitzer von Ordnern mit VB-Script auslesen).
Dies ist der Code, den ich aus dem oben genannten Threat kopiert habe:
ordner = "C:\Downloads"
Liste = "C:\Liste.csv"
Set fs = CreateObject("Scripting.FileSystemObject")
Set f1 = fs.GetFolder(ordner)
If fs.FileExists(Liste) Then fs.DeleteFile(Liste)
Set WshShell = CreateObject("WScript.Shell")
For Each unterordner In f1.Subfolders
listunter = listunter & unterordner & vbcrlf
CMD = "cmd /c for /f ""skip=7 tokens=4*"" %a in ('dir """ & unterordner & """/q^|findstr /v ""Datei(en) Verzeichnis(se)""') do @echo %a;%b"
besitzer = WshShell.Exec(CMD).StdOut.ReadAll
listunter = listunter & besitzer & vbcrlf
Next
fs.CreateTextFile(Liste).Write listunter
Weiters wäre es von Vorteil, wenn die Dateibezeichnung des ausgegebene Files immer als Präfix das jeweilige Erstellungsdatum hätte. Beispiel: "2012 11 20 Liste.csv"
Leider habe ich keine Ahnung, wie ich dies in den Code oben einbauen sollte.
Bin leider nicht sooo vertraut mit der Materie und komme einfach nicht auf die richtige Lösung -.-
Vielleicht kann mir hierzu jemand helfen?
Lg
Pretznbär
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 194584
Url: https://administrator.de/contentid/194584
Ausgedruckt am: 29.11.2024 um 14:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo Pretznbaer und willkommen im Forum!
Wenn es nur um den Dateinamen gehen sollte:
- oder hattest Du noch eine andere Frage?
Grüße
bastla
P.S.: VBS braucht's dafür aber eigentlich gar nicht - ließe sich auch per Batch erledigen (ungetestet):
Wenn es nur um den Dateinamen gehen sollte:
Liste = "C:\" & Right(Date, 4) & " " & Mid(Date, 4, 2) & " " & Left(Date, 2) & " Liste.csv"
Grüße
bastla
P.S.: VBS braucht's dafür aber eigentlich gar nicht - ließe sich auch per Batch erledigen (ungetestet):
@echo off & setlocal
set "Ordner=C:\Downloads"
set "Liste=C:\%date:~-4% %date:~-7,2% %date:~-10,2% Liste.csv"
del "%Liste%" 2>nul
for /d %%i in ("%Ordner%\*") do (
echo %%i
for /f "skip=7 tokens=4*" %%a in ('dir "%%i" /q^|findstr /v "Datei(en) Verzeichnis(se)"') do echo %%a;%%b
)>>"%Liste%"
Hallo Pretznbaer!
Da es ja auch dem Titel des Threads besser entspricht , doch noch ein VBS-Ansatz:
Grüße
bastla
Da es ja auch dem Titel des Threads besser entspricht , doch noch ein VBS-Ansatz:
Startordner = "C:\Downloads"
Detail = "Owner" 'da engl. OS; dt: "Besitzer"
'Formatiertes Datum für Dateinamen unabhängig von Sprache und Ländereinstellung ermitteln
CSV = "C:\" & Year(Date) & " " & Right("0" & Month(Date), 2) & " " & Right("0" & Day(Date), 2) & " Ordnerliste.csv"
Set objShell = CreateObject ("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
'Nr der gesuchten Eigenschaft ("Owner") suchen, da abhängig vom OS
Set objFolder = objShell.Namespace(Startordner)
DNr = -999
For i = 0 to 300
If objFolder.GetDetailsOf (, i) = Detail Then
DNr = i
Exit For
End If
Next
If DNr = -999 Then
WScript.Echo "Die Eigenschaft """ & Detail & """ konnte nicht gefunden werden!"
WScript.Quit
End If
Set objCSV = fso.CreateTextFile(CSV) 'Ausgabedatei erstellen
ProcessFolder fso.GetFolder(Startordner) 'Rekursion im Startordner beginnen
Sub ProcessFolder(objFld)
strFldPath = objFld.Path 'Pfad des untersuchten Ordners zwischenspeichern - wird mehrmals benötigt
Set objFolder = objShell.Namespace(strFldPath) 'Namespace-Objekt des Ordners erzeugen
For Each objFile In objFld.Files 'alle Dateien des Ordners durchgehen
strFileName = objFile.Name 'Dateinamen zwischenspeichern
'Dateipfad und gesuchte Info in Zieldatei ausgeben
objCSV.WriteLine strFldPath & "\" & strFileName & ";" & objFolder.GetDetailsOf(objFolder.ParseName(strFileName), DNr)
Next
For Each objSubFld In objFld.SubFolders 'alle Unterordner des Ordners durchgehen
strSubFldName = objSubFld.Name 'Orndernamen zwischenspeichern
'Ordnerpfad und gesuchte Info in Zieldatei ausgeben
objCSV.WriteLine strFldPath & "\" & strSubFldName & ";" & objFolder.GetDetailsOf(objFolder.ParseName(strSubFldName), DNr)
ProcessFolder objSubFld 'Bearbeitung des Unterordners aufrufen (Rekursion)
Next
End Sub
bastla