loloft
Goto Top

CMD Script Wiederholen und überschreiben

Hallo zusammen,

Ich möchte gerne die Startup-Config und die Running-Config eines Aruba Switches täglich sichern, mit Timestamp.

Zusätzlich sollen die Dateien für 30 Tage vorgehalten werden in einen bestimmten Pfad kopiert werden und danach wieder nacheinander überschrieben werden.

mein script sieht wie folgt aus:

__________________________________________________

@echo off

echo Starting....

set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%

echo y | "pscp.exe" -v -P 22 -scp "@192.168.1.1:cfg/running-config" "c:\TestBackup\Switches\Backup_%DATETIMEF%_192.168.1.1_run.conf"  

echo y | "pscp.exe" -v -P 22 -scp "@192.168.1.1:cfg/startup-config" "c:\TestBackup\Switches\Backup_%DATETIMEF%_192.168.1.1_start.conf"  

echo DONE!

_________________________________________________________________________

Jetzt funktioniert das, aber ich möchte die Backups gern wie schon erwähnt nach und nach ab Tag 30 überschreiben, das funktioniert so leider noch nicht. Also ab Tag 31, das erste, ab Tag 32, das zweite usw.

Ich stecke gerade irgendwie fest ^^

Ich hoffe ihr könnt mir helfen.

Content-Key: 2977164383

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

Printed on: April 24, 2024 at 12:04 o'clock

Member: JasperBeardley
JasperBeardley Jun 03, 2022 at 09:42:00 (UTC)
Goto Top
Moin

da sollte sich mit forfiles was machen lassen.

Gruß
Jasper
Member: killtec
killtec Jun 03, 2022 at 09:55:12 (UTC)
Goto Top
Hi,
wie wäre es mit Powershell? Du ziehst die run und start configs mit Timestamp und löscht Dateien, die älter als X-Tage sind.
in der Powershell kannst du das löschen so erledigen:
Get-childitem *.conf -file | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item

Gruß
Member: miniversum
miniversum Jun 03, 2022 at 10:25:15 (UTC)
Goto Top
Hallo,

Das lässt sich einfach mit FOR und DIR realisieren.
"dir" seit die die entsprechednen Dateien an. Da die schon das Format YYYY_MM_DD... haben sollten Sie alphabetisch sein. Daher brauchst du eigentlich nur die Parameter /b /O-N um die eine Liste der Dateien in umgekehrter alphabetischer Reihenfolge anzuzeigen. Weitere Parameter zum Filtern gehen natürlich auch.
"Dir /b /O-N *_192.168.1.1_run.conf" listet dir also alle Dateien dieser Art auf, di eneusten zuerst. Diese Liste kannst Du dann in einer For-Schleife durch gehen und löschen. Die ersten 30 überspringst Du dabei.
Das Ganze sieht dann ungefär so aus:
FOR /F "skip=30 delims=" %%i in ('Dir /b /O-N *_192.168.1.1_run.conf') do del %%i
Das Ganze dann halt mit der Andern "_run.conf" Datei genau so.
Statt /O-N kannst du auch direkt nach Dateidatum sortieren. Das ist Geschmackssache.

Gruß
...
Member: loloft
loloft Jun 03, 2022 at 11:14:13 (UTC)
Goto Top
Get-childitem *.conf -file | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)} | Remove-Item



Oh Man.. So einfach.. Klar.. Ich kann die Dateien die älter sind als 30 Tage einfach löschen, das das Script per Windows aufgabenplanung jeden Tag ausgeführt werden soll wird dann die neue Conf. angelegt und die Dateien die älter sind als 30 Tage einfach gelöscht, statt überschrieben -.-

Ich habe viel zu kompliziert gedacht...

habe jetzt einfach diese Zeile eingefügt. so löscht er dann jedes mal beim Ausführen die entsprechenden Dateien ( So hoffe ich es zumindest ^^)

forfiles /p "c:\TestBackup\Switches" /s /m *.* /time -30 /c "cmd /c del @path"