paddy89
Goto Top

Hilfe bei Skript - wenn eine Datei Datum x hat - alle löschen

Hallo zusammen,

ich bräuchte mal Unterstützung. Ich brauche ein Skript/Batch, was in einem Ordner Dateien nach Erstellungsdatum überprüft. Ist eine Datei dabei, welches älter als X ist, sollen alle Dateien (egal wie alt) gelöscht werden.

ich habe mit

forfiles -p c:\test -m *.* -S -d -28 -c "cmd /c del 0x22@FILE0x22"

herumgespielt, habe es aber nicht geschafft wie gewünscht. Habe es auch nicht mit einer If Abfrage geschafft. hat vlt. jemand den entscheidenden Hinweis für mich?
System ist ein Server2016.

Content-Key: 359992

Url: https://administrator.de/contentid/359992

Ausgedruckt am: 29.03.2024 um 07:03 Uhr

Mitglied: 135111
135111 05.01.2018 aktualisiert um 10:01:36 Uhr
Goto Top
System ist ein Server2016.
Powershell wäre hier dann doch angebrachter
$ordner = 'C:\test'  
if ((gci $ordner -File | ?{$_.CreationTime -lt (get-date).AddDays(-28)})){
   remove-item "$ordner\*" -Force  
}
Gruß @135111
Mitglied: paddy89
paddy89 05.01.2018 um 10:18:39 Uhr
Goto Top
Ok. Ich weis noch nicht ob ich über das Programm, worüber es gestartet wird, PS Skripte anhängen kann.
Schaut soweit gut aus.
Ich habe nun zusätzlich nach dem Parameter für das "Änderungsdatum" gesucht, leider aber nicht gefunden. Könntest du mir hier noch weiterhelfen? Danke
Mitglied: 135111
135111 05.01.2018 aktualisiert um 10:21:21 Uhr
Goto Top
Ich weis noch nicht ob ich über das Programm, worüber es gestartet wird, PS Skripte anhängen kann.
Powershell kannst du auch aus einer Batchdatei starten. oder den kompletten Befehl in eine Kommandozeile packen. Möglichkeiten sind hier vielfältig.
Ich habe nun zusätzlich nach dem Parameter für das "Änderungsdatum" gesucht,
Oben $_.CreationTime durch $_.LastWriteTime ersetzen
Mitglied: Meierjo
Meierjo 05.01.2018 um 10:48:47 Uhr
Goto Top
Hallo

Bei mir funktioniert forfiles schon länger so (auf einem SBS 2011, sollte aber auch auf dem 2016 tun):

forfiles.exe /P "%windir%\System32" /M *.log /D -33 /C "CMD /C del @File && echo @path wird gelöscht" >>%Logfile%

Löscht zB alle Logfiles in %windir%\System32, die älter als 33 Tage sind
Zusätzlich /S würde noch alle Unterverzeichnisse in %windir%\System32 durchsuchen

Und das mit dem Echo schreibt mir die zu löschenden Dateien zusätzlich noch in ein Logfile

Gruss
Mitglied: paddy89
paddy89 05.01.2018 um 11:00:04 Uhr
Goto Top
Danke euch soweit.
Ich habe mir bereits eine Bat gebaut, welche das PS Sript ausführt.
Manuell starte ich die Bat, welche wiederum Problemlos das PS Skript ausführt.
Leider funktioniert es nicht über mein Programm ( Veeam Backup+Replikation).
Konnte auch noch kein Log finden, wo steht wieso.

Aber ich danke euch soweit erstmal. Die Eigentliche Frage ist ja damit gelöst.
Mitglied: paddy89
paddy89 05.01.2018 um 11:10:55 Uhr
Goto Top
Zitat von @Meierjo:

Löscht zB alle Logfiles in %windir%\System32, die älter als 33 Tage sind
Zusätzlich /S würde noch alle Unterverzeichnisse in %windir%\System32 durchsuchen

Und das mit dem Echo schreibt mir die zu löschenden Dateien zusätzlich noch in ein Logfile

Gruss

Danke. Aber da hast du meine Situation nicht verstanden. Wenn eine Datei, älter als zb. 33 tage ist, sollen alle Dateien, gleich welches Alter, gelöscht werden.
Mitglied: Penny.Cilin
Penny.Cilin 05.01.2018 um 11:28:02 Uhr
Goto Top
Zitat von @paddy89:

Zitat von @Meierjo:

Löscht zB alle Logfiles in %windir%\System32, die älter als 33 Tage sind
Zusätzlich /S würde noch alle Unterverzeichnisse in %windir%\System32 durchsuchen

Und das mit dem Echo schreibt mir die zu löschenden Dateien zusätzlich noch in ein Logfile

Gruss

Danke. Aber da hast du meine Situation nicht verstanden. Wenn eine Datei, älter als zb. 33 tage ist, sollen alle Dateien, gleich welches Alter, gelöscht werden.
Dann musst Du die Batchdatei nur sinngemäß anpassen. Etwa so (ungetestet):
forfiles.exe /P "%windir%\System32" /M *.log /D -33 /C "CMD /C del *.* && echo @path wird gelöscht" >>%Logfile%  

D.h. aus dem del @File habe ich ein del *.* gemacht.

Teste es mit einem Testverzeichnis und nicht in %windir%\System32!!!

Gruss Penny
Mitglied: paddy89
paddy89 05.01.2018 aktualisiert um 12:01:08 Uhr
Goto Top
Zitat von @Penny.Cilin:
Dann musst Du die Batchdatei nur sinngemäß anpassen. Etwa so (ungetestet):
forfiles.exe /P "%windir%\System32" /M *.log /D -33 /C "CMD /C del *.* && echo @path wird gelöscht" >>%Logfile%  

Gruss Penny

Ich habe es so nun mal versucht. Er fragt ab nun für jede Datei, ob diese gelöscht werden soll. Bekomme es nicht raus.
Habe es so nun stehen
forfiles.exe -P "c:\test" -M *.* -S -D -33 -C "CMD /C del *.*"  
Mitglied: Penny.Cilin
Penny.Cilin 05.01.2018 um 12:02:50 Uhr
Goto Top
OK, man könnte ja mal die Hilfefunktion des Befehles DEL benutzen.
Und siehe da
del /?
zeigt die den Parameter
/q

Also testen.

Gruss Penny