bellamiiii
Goto Top

Batch löschen nach Tagen x aber mit Ausnahme

Hallo Leute,

Im ersten Bild seht ihr wie mein Ordner auszusehen hat und im 2. seht ihr die verschiedenen Versionen der exe "WolfPress".
In unregelmäßigen Abständen kommt eine neue Version der .exe , die alte wird dann mit der Versionsnummer umbenannt (wie im 2.Bild).
Die neuste Version wird in "WolfPess" umbenannt damit sie dann als aktive exe gilt.
Es kann aber vorkommen, dass die neue fehlerhaft und daher erst eine Testphase (meist eine Woche) braucht.
Sollte nun die Woche rum sein kann die alte Version gelöscht werden.
Folgenden Syntax habe ich schon gefunden

Forfiles /P E:\Ordner\ /S /M *WolfPress* /D -8 /C "cmd /c del /q @path"

/P E:\Ordner : Pfad auf dem die Suche gestartet werden soll
/S : Bitte mit allen Unterordnern
/M *.* : Suchmaske - hier alle Dateien (ausser denen ohne Dateiendung)
/D -8 : Letztes Änderungsdatum älter als 8 Tage zum heutigen Datum
/C "cmd /c del /q @path" : Befehl der mit diesen Dateien ausgeführt werden soll (hier löschen)

aber dies führt dazu, dass zwar die alten Versionen verschwinden ABER wenn die neuste .exe geschlossen ist wird diese auch gelöscht.
In der Suchmaske lasse ich nach "WolfPress" suchen, daher verschwindet diese ja auch, aber genau diese exe (ohne Versionsnummer im Namen) soll vorhanden bleiben.

Leider habe ich keine Variante ergoogle´n können, die eine Ausnahme macht.
D.h. nur WolfPress.exe soll vom löschen nicht betroffen sein egal wie alt sie ist


könnt ihr mir helfen ?
unbenannt2
unbenannt

Content-Key: 502205

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

Printed on: April 16, 2024 at 15:04 o'clock

Member: emeriks
emeriks Oct 08, 2019 updated at 06:29:41 (UTC)
Goto Top
Hi,
allein mit einem Zeitfilter wird das schwierig, es sei denn Du kannst garantieren, dass innerhalb der angegebenen Zeitspanne immer wieder eine neuere Version dazu kommt.
Ich würde wahrscheinlich ein PS-Script schreiben, welches zuerst die vorhandenen Dateien mit deren Zeitstempel auflistet und dann alle bis auf die aktuellste löscht.

E.

Edit:
Oder, einfach den Filter um "4_" erweitern?
/M *WolfPress4_*
Member: Bellamiiii
Bellamiiii Oct 08, 2019 at 06:59:35 (UTC)
Goto Top
Hy, Danke erstmal für die Antwort ^^

mhmh PS Script ? wie würde das aussehen ?=D hab mich bei programmieren eher nur durchgemogelt xD

wäre ne Möglichkeit.... müsste dann nur alle Stationen nochmal anfassen wenn wir mal bei 5 sind
Member: emeriks
emeriks Oct 08, 2019 at 07:03:36 (UTC)
Goto Top
Zitat von @Bellamiiii:
wäre ne Möglichkeit.... müsste dann nur alle Stationen nochmal anfassen wenn wir mal bei 5 sind
Und wie oft kommt das vor?
Ansonsten könntest Du "blind" vorsorgen, am einfachsten so (oder mit einer Schleife)
Mehrere Befehle mit nacheinander
/M *WolfPress4_*
/M *WolfPress5_*
/M *WolfPress6_*
/M *WolfPress7_*
/M *WolfPress8_*
Member: Bellamiiii
Bellamiiii Oct 08, 2019 at 07:06:20 (UTC)
Goto Top
naja nicht sooo oft .. je nachdem wie schnell der Programmierer ist und wieviele Anforderungen der Produktionsleiter an das Programm hat.

Aber top Ansatz

Danke erstmal ich werde es mal testen
Member: emeriks
emeriks Oct 08, 2019 updated at 07:14:29 (UTC)
Goto Top
Zitat von @Bellamiiii:
mhmh PS Script ? wie würde das aussehen ?=D hab mich bei programmieren eher nur durchgemogelt xD
Ungefähr so
$Files = dir WolfPress*.* | select Fullname,LastWriteTime | sort LastWriteTime -desc
$CurrentVersion = $Files
$Files | ?{-not ($_.Fullname -eq $CurrentVersion.Fullname)} | Remove-Item

Ungetestet!

E.
Member: Crusher79
Crusher79 Oct 08, 2019 at 08:31:45 (UTC)
Goto Top
Und was ist dem zeitlichen Abstand? Mit AddDays kann man da die besagte Woche oder mehr/ weniger enbauen.

$path = "C:\..\Pfad.."  
$date = (Get-Date).AddDays(-7)
Get-ChildItem -Path $path  | Where {$_.LastWriteTime -lt $date -and $_.Name -like "WolfPress4*"}  | Remove-Item -Force   
Member: emeriks
emeriks Oct 08, 2019 at 08:36:19 (UTC)
Goto Top
Zitat von @Crusher79:
Und was ist dem zeitlichen Abstand? Mit AddDays kann man da die besagte Woche oder mehr/ weniger enbauen.
Kann man noch einbauen.
Beachte, auch Dein Beispiel berücksichtigt nur "4".

Also könnte man zusammenbauen:
$Files = dir WolfPress*.* | select Fullname,LastWriteTime | sort LastWriteTime -desc
$CurrentVersion = $Files
$Files | ?{-not ($_.Fullname -eq $CurrentVersion.Fullname) -and ($_.LastWriteTime -lt (Get-Date).AddDays(-7)) } | Remove-Item