crinax
Goto Top

Batch: Dateien älter als X filtern und in einer TXT oder CSV speichern

Guten Morgen liebe Community,

ich habe gestern ein PowerShell Skript erstellt, welches Dateien filtert in einem angegebenem Pfad und diese dann in einer .CSV speichert (Pfad+Name und letztes Änderungsdatum). Das Skript sieht in etwa so aus:
#Alle Dateien auf Datum überprüfen und wenn älter als X dann in CSV schreiben
Get-ChildItem $path –Recurse| where {$_.LastWriteTime –lt $date} | Select-Object FullName, LastWriteTime | sort LastWriteTime | export-csv -path "$csv_path\$csv_name.csv" -encoding ASCII -NoTypeInformation -Delimiter ";"  

Nun probiere ich das ganze auch für Windows Server 2000 in einer .bat zu realisieren. Das einzige was ich dazu allerdings finde ist der "forfiles" Befehl. Like this:
Forfiles /P E:\Ordner\ /S /M *.* /D -8 /C "cmd /c del /q @path"  

Nur löscht dieser Befehl die Dateien und ich weiß absolut nicht wie ich es hinkriege, dass er die Dateien nicht löscht sondern diese einfach in einer .txt oder .csv speichert.

Kann mir da wer helfen?

LG
crinaX

Content-ID: 246474

Url: https://administrator.de/forum/batch-dateien-aelter-als-x-filtern-und-in-einer-txt-oder-csv-speichern-246474.html

Ausgedruckt am: 23.12.2024 um 14:12 Uhr

colinardo
Lösung colinardo 14.08.2014 aktualisiert um 09:07:21 Uhr
Goto Top
forfiles /P "E:\Ordner" /S /M *.* /D -8 /C "cmd /c echo "@path";""@fdate" "@ftime""">deineCSVDatei.csv
Grüße Uwe
crinaX
crinaX 14.08.2014 aktualisiert um 09:07:17 Uhr
Goto Top
Wieder viele Dank für die schnelle Antwort face-smile
Also die Ausgabe in der CMD sieht soweit richtig aus. Nur steht jetzt hinter der Zeit der Pfad der CSV und diese CSV wird auch nicht erstellt... Noch einen Tipp?


EDIT:
Du hattest schon korrigiert, aber ich noch nicht aktualisiert. Vielen Dank! Funktioniert einwandfrei.

LG
crinaX
crinaX
crinaX 14.08.2014 aktualisiert um 09:27:12 Uhr
Goto Top
Kann ich das ganze auch mit Variablen ausfüllen?

forfiles /P %path% /S /M *.* /D -%date% /C "cmd /c echo "@path";""@fdate" "@ftime""">%csv_path%\%csv_name%.csv  

Habe es so probiert und die Variablen werden halt vorher vom Nutzer eingetippt. Nun bekomm ich allerdings den Fehler:
FEHLER: Argument/Option ungültig - 'System'.  
colinardo
colinardo 14.08.2014 aktualisiert um 09:33:50 Uhr
Goto Top
sicher, aber du machst einige Fehler. z.B. verwendest du die spezielle %Path%-Systemvariable und die Systemvariable %date% (außer du wolltest das aktuelle Datum verwenden), hier solltest du besser andere Namen vergeben und der zweite Fehler ist das nicht umschließen der Pfade mit Anführungszeichen wenn sie Leerzeichen enthalten sollten:
forfiles /P "%STRPATH%" /S /M *.* /D -%STRDATE% /C "cmd /c echo "@path";""@fdate" "@ftime""">"%csv_path%\%csv_name%.csv"
crinaX
crinaX 14.08.2014 um 09:41:00 Uhr
Goto Top
Das mit der Systemvariablen war mir dann auch aufgefallen. Nur scheinen die Anführungszeichen auch nicht zu helfen:

set /p spath = Bitte Pfad eingeben in dem gesucht werden soll: 
set /p sdate = Bitte geben Sie ein Alter in Tagen an, ab welchem gefiltert werden soll: 
set /p csv_path = Bitte geben Sie einen Pfad ein in welchem die CSV Datei gespeichert werden soll: 
set /p csv_name = Bitte geben Sie einen Namen f%ue%r die CSV Datei ein: 

forfiles /P "%spath%" /S /M *.* /D -"%sdate%" /C "cmd /c echo "@path";""@fdate" "@ftime""">"%csv_path%\%csv_name%.csv"  
pause

Mit Anführungszeichen kommt:
FEHLER: Der Wert für Option "/P" darf nicht leer sein.  

Und ohne Anführungszeichen:
FEHLER: Ungültige Syntax. Wert für "/P" erwartet.  
colinardo
colinardo 14.08.2014 aktualisiert um 09:45:46 Uhr
Goto Top
du hast bei deinen SET-Befehlen zwischen der Variablennamen und dem Gleichheitszeichen ein Leerzeichen, das darfst du nicht machen !! Denn ansonsten ist die Variable hinterher leer bzw. existiert nicht. Deswegen die Meldung von Forfiles das der Pfad leer ist !
set /p spath=Bitte Pfad eingeben in dem gesucht werden soll: 
set /p sdate=Bitte geben Sie ein Alter in Tagen an, ab welchem gefiltert werden soll: 
set /p csv_path=Bitte geben Sie einen Pfad ein in welchem die CSV Datei gespeichert werden soll:
set /p csv_name=Bitte geben Sie einen Namen f%ue%r die CSV Datei ein: 
crinaX
crinaX 18.08.2014 um 08:45:51 Uhr
Goto Top
Funktioniert alles einwandfrei. Gibt es auch noch Variablen die ich bei:
forfiles /P "%spath%" /S /M *.* /D -"%sdate%" /C "cmd /c echo "@path";""@fdate" "@ftime""">"%csv_path%\%csv_name%.csv"  
Anhängen kann um mir auch noch den Ersteller der Datei und das Erstellungsdatum (nicht Änderungsdatum) in die CSV zu speichern?
colinardo
colinardo 18.08.2014 um 08:55:09 Uhr
Goto Top
forfiles /?
gibt dir diese Auskunft.

Grüße Uwe