Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Nur Dateien löschen in verschiedenen Ordnern nach X Tagen.

Frage Microsoft

Mitglied: darkangel2k3

darkangel2k3 (Level 1) - Jetzt verbinden

30.09.2012, aktualisiert 17:38 Uhr, 5233 Aufrufe, 15 Kommentare

Hallo zusammen,

ich brauche mal wieder von der Gemeinde ein paar Tipps, weil ich bei dem Script nicht weiter komme.

Es geht um eine Angelegenheit, die mich schon ein paar Tage beschäftigt und wo ich dringend Hilfe von ein paar schlauen Köpfen benötige.
Ich besitze ein paar Server, die regelmäßig lokal logs schreiben in einen festen Ordern.

Hier kurz aufgemalt wie ich das meine.

Beispiel:

-------->C:
----------->Logs <- Hauptordner
---------------->11111111 <- ein Unterordner
------------------------>11111111_20120706113401_logs.zip
------------------------>11111111_20120806113401_logs.zip
------------------------>11111111_20110706113401_logs.zip
------------------------>11111111_20100706113401_logs.zip
------------------------>11111111_usw._logs.zip

---------------->11111112
------------------------>11111113_20120706113401_logs.zip
------------------------>11111113_20120806113401_logs.zip
------------------------>11111113_20110706113401_logs.zip
------------------------>11111113_20100706113401_logs.zip
------------------------>11111113_usw._logs.zip

---------------->11111113
------------------------>11111113_20120706113401_logs.zip
------------------------>11111113_20120806113401_logs.zip
------------------------>11111113_20110706113401_logs.zip
------------------------>11111113_20100706113401_logs.zip
------------------------>11111113_usw._logs.zip

Ich möchte im Moment dass jeden Tag die Dateien !!!keine Ordner!!!, die älter sind als 2 Monate, gelöscht werden.

Im Moment habe ich folgendes:

01.
C: 
02.
 
03.
cd "c:\logs" 
04.
 
05.
if exist temp.txt del temp.txt else echo "Keine Temp Datei zu löschen!" 
06.
 
07.
date /t >> "C:\logs\temp.txt" 
08.
 
09.
dir "C:\logs\" /s /t >> "C:\logs\temp.txt" 
10.
 
11.
if exist only_files.txt del only_files.txt else echo "Keine Temp Datei zu löschen!" 
12.
 
13.
findstr /E _logs.zip "temp.txt" >> "C:\logs\only_files.txt" 
14.
 
15.
(Zeug was noch nicht fertig ist) 
16.
 
17.
current_date=%date:~6,4%%date:~3,2%%date:~0,2%%time:~0,2%%time:~3,2%%time:~6,2%  
18.
 
19.
(Bedingung / Schleife müsste hier wohl hin, welche automatisch in current_file pro Zeile die Datei auswertet) 
20.
 
21.
current_file=1_zeile/datei_aufgefuehrt_in_der_temp_datei_welche_nur_die_Datei_zeigt (wie schaffe ich es hier, dass für die Rechnung nur das Datum der jeweiligen Datei genutzt wird, aber später dann auch die richtige Datei gelöscht wird) 
22.
 
23.
rem 00000200000000 sind 2 Monate (Wenn Monat Februar oder Januar ist, müsste noch die Bedingung rein, dass nicht minus 00000200000000 gerechnet werden muss, sondern 00009000000000 bei Januar und Februar. (wenn ich das richtig berechnet habe^^)  
24.
 
25.
if current_file < /current_date /a - 00000200000000) del current_file
Wie die schnellen von euch schon gesehen haben, haben die Dateien ein Datum-Feld, welches rückwärts formatiert ist.
Ich möchte gerne die Daten, die auf den Dateien zu erkennen sind auswerten und nicht den Windows Timestamp, da dieser nicht korrekt läuft und die Zeit von Programm, der den Timestamp auf den Dateien versteht, richtig ist.

Bis zum findstr Befehl erhalte ich dann sowas:

06.07.2012 11:21 8.189 11111111_20120706113401_logs.zip
10.07.2012 10:15 6.974 11111111_20110804225407_logs.zip
19.07.2012 08:15 11.424 11111111_20100813210233_logs.zip
19.07.2012 08:26 1.233 11111111_20120213210358_logs.zip
usw.

Die eigentliche Datei fängt dann immer ab Spalte 37 an.
Das Datum ab Spalte 46 und Hört bei Spalte 60 auf.

Ich möchte also dann diese Datei rausisolieren und habe mir folgendes gedacht.

Ich rechne das aktuelle Datum so um, dass es mit dem Format der Log Datei übereinstimmt.

Dann nehme ich eine Datei aus der "only_files" Liste und lasse das aktuelle Datum minus das Datum + 2 Monate aus der Liste berechnen und wenn das aktuelle Datum vom numerischen Wert höher ist, soll anschließend die Datei im Ordner gelöscht werden.

Aber wie mache ich das?

Wie kann ich das so übersetzen (mit Batch mitteln ohne VBS und Powerscripten - da ältere Server)?

Für jede Hilfe bin ich dankbar!

Andere Wege im Batch Bereich sind mir auch gerne Willkommen, da ich von sowas keine Ahnung habe.
Mitglied: wiesi200
30.09.2012, aktualisiert um 16:32 Uhr
Hallo,

Ich glaub das ist was für dich
Forfiles
Bitte warten ..
Mitglied: darkangel2k3
30.09.2012 um 16:13 Uhr
Leider kommt nur "Seite nicht gefunden..."
Bitte warten ..
Mitglied: wiesi200
30.09.2012 um 16:40 Uhr
Versuch's jetzt bitte mal. Der Link sollte jetzt passen.
Bitte warten ..
Mitglied: darkangel2k3
30.09.2012 um 16:45 Uhr
Danke, ich kenne forfiles - aber wenn du gelesen hast, was ich geschrieben habe - möchte ich nicht den Windows Timestamp auswerten.
Wenn das hier auch Dateinamen auswerten kann und mit aktuellen Datum abgleicht lasse ich mich gerne erhellen.

Trotzdem danke!
Bitte warten ..
Mitglied: wiesi200
30.09.2012 um 16:50 Uhr
Nö, das mit Timestamp hab ich überlesen.
Bitte warten ..
Mitglied: darkangel2k3
30.09.2012, aktualisiert um 17:36 Uhr
Kein Problem, ich hoffe dass vielleicht u.a. Bieber oder bastla Zeit und Lust haben und sich vielleicht diesen Thread ansehen und haben den einen oder anderen Tipp für mich...
Bitte warten ..
Mitglied: pieh-ejdsch
30.09.2012 um 17:41 Uhr
moin,

als Test in der CMD-Line:
>for /f %a in ('set /a "D=%date:~-4%%date:~-7,-5%%date:~-10,-8% - 200" ') do @for /f "tokens=1,2*delims=_" %i in ("11111113_20120706113401_logs.zip") do @set "x=%j" &cmd /von /c "if !x:~0^,8! lss %a echo del "%i_%j_%k" "
Gruß Phil
Bitte warten ..
Mitglied: bastla
30.09.2012, aktualisiert um 18:06 Uhr
Hallo darkangel2k3!

Auch von mir etwas zum Testen:
01.
@echo off & setlocal 
02.
set "Basis=C:\Logs" 
03.
set /a MonateAlt=2 
04.
 
05.
for /f "tokens=1-3 delims=." %%i in ("%date%") do set /a Jahr=%%k & set /a Monat=1%%j & set /a Tag=1%%i 
06.
set /a TSJahr=Jahr 
07.
set /a TSMonat=Monat - MonateAlt 
08.
if %TSMonat% leq 100 (set /a TSJahr-=1 & set /a TSMonat+=12) 
09.
set "TS=%TSJahr%%TSMonat:~-2%%Tag:~-2%" 
10.
 
11.
for /f "delims=" %%i in ('dir /s/b/a-d "%Basis%\*.zip"') do for /f "tokens=2 delims=_" %%a in ("%%~ni") do if "%%a" lss "%TS%" echo del "%%i"
Durch das "echo" in der letzten Zeile werden die Löschbefehle nur angezeigt, aber nicht ausgeführt.

Die Ungenauigkeit beim Vergleich (es wird, so wie im Ansatz von PH, einfach die Monatszahl um den in Zeile 3 angegebenen Wert - im Beispiel 2 - verringert) wird hoffentlich zu verschmerzen sein - ansonsten einfach die Berechnung des Timestamps (%TS%) anpassen ...

Grüße
bastla

P.S.: Welche älteren Server-BS, auf denen VBS nicht verwendet werden könnte, sind denn bei Euch im Einsatz?
Bitte warten ..
Mitglied: HubertN
30.09.2012, aktualisiert um 19:50 Uhr
Moin

Wieso eigentlich immer das Rad neu erfinden ? Ich nehme für solche Aufgaben einfach delage

Gruß

Hubert
Bitte warten ..
Mitglied: darkangel2k3
30.09.2012, aktualisiert um 20:00 Uhr
Vielen Dank wie immer euch beiden.

Ja NT und so'n Gedöns/Garaffel und sicher ist sicher... und ich hab mal wieder keine Ahnung was ich machen soll =).

So wirklich verstehe ich das Script nicht, aber es funktioniert nicht so richtig.

Natürlich auch daran zu verschulden, dass ich mal wieder stuß aufgezeichnet habe. Der komplette Zeitstempel als Dateiname ändert sich, nicht nur das Jahr und Monat - im Moment nimmt findet ja das Script nur JAHRMO06113401!

Aber so sieht es eigentlich aus:

-------->C:
----------->Logs <- Hauptordner
---------------->11111111 <- ein Unterordner
------------------------>11111111_20120705073601_logs.zip
------------------------>11111111_20120802123301_logs.zip
------------------------>11111111_20110708113401_logs.zip
------------------------>11111111_20100707153401_logs.zip
------------------------>11111111_usw._logs.zip

---------------->11111112
------------------------>11111113_20120406052901_logs.zip
------------------------>11111113_20120806235501_logs.zip
------------------------>11111113_20110106100101_logs.zip
------------------------>11111113_20101106182601_logs.zip
------------------------>11111113_usw._logs.zip

---------------->11111113
------------------------>11111113_20120106133401_logs.zip
------------------------>11111113_20120207153401_logs.zip
------------------------>11111113_20110308173401_logs.zip
------------------------>11111113_20100409193401_logs.zip
------------------------>11111113_usw._logs.zip

Die Unterordner können natürlich auch anders heißen und andere Bezeichnungen habe, aber die Zips-Log sind immer gleich aufgebaut, aber haben auch willkürlich andere Zahlen Kombinationen.

Was muss ich anpassen, damit der ganze String variable erkannt wird?

Und wenn du magst und ganz ganz ganz nett bist, vielleicht kurz die Zeit nehmen und ganz kurz erklären, wie du das realisiert hast respektive, was da was macht im Script^^
Bitte warten ..
Mitglied: bastla
30.09.2012, aktualisiert um 19:55 Uhr
@ HubertN

Gute Idee, wenn da nicht
Ich möchte gerne die Daten, die auf den Dateien zu erkennen sind auswerten und nicht den Windows Timestamp
zu berücksichtigen wäre ...

Grüße
bastla
Bitte warten ..
Mitglied: darkangel2k3
30.09.2012, aktualisiert um 19:57 Uhr
Danke HubertN, aber die Server können und dürfen nicht verändert werden, nur Boardmittel dürfen genutzt werden in der Firma.

ja und wie bastla schon oben erwähnt hat^^
Bitte warten ..
Mitglied: bastla
30.09.2012 um 20:08 Uhr
Hallo darkangel2k3!

Mit Deinen Testdaten erhalte ich mit meinem Batch-Ansatz von oben folgende Löschbefehle als Ergebnis:
del "C:\Logs\11111111\11111111_20100707153401_logs.zip" 
del "C:\Logs\11111111\11111111_20110708113401_logs.zip" 
del "C:\Logs\11111111\11111111_20120705073601_logs.zip" 
del "C:\Logs\11111112\11111112_20101106182601_logs.zip" 
del "C:\Logs\11111112\11111112_20110106100101_logs.zip" 
del "C:\Logs\11111112\11111112_20120406052901_logs.zip" 
del "C:\Logs\11111113\11111113_20100409193401_logs.zip" 
del "C:\Logs\11111113\11111113_20110308173401_logs.zip" 
del "C:\Logs\11111113\11111113_20120106133401_logs.zip" 
del "C:\Logs\11111113\11111113_20120207153401_logs.zip"
- sieht doch eigentlich vernünftig aus ...
Nur ganz kurz zu Zeile 11 (den davor ermittelten Vergleichs-Timestamp %TS% kannst Du ja zur Kontrolle ausgeben lassen):
for /f "delims=" %%i in ('dir /s/b/a-d "%Basis%\*.zip"') do
liefert alle unterhalb von "%Basis%" liegenden *.zip-Dateien mit voller Pfadangabe in "%%i"
for /f "tokens=2 delims=_" %%a in ("%%~ni") do
zerlegt nur den Dateinamen ("%%ni") anhand des "_" und stellt den zweiten entstehenden Teil - also etwa "20110708113401" - in "%%a" zur Verfügung
if "%%a" lss "%TS%" echo del "%%i"
Durch den Text-Vergleich (wegen der Anführungszeichen; es wird nicht die Zahl, sondern Zeichen für Zeichen von links nach rechts verglichen) kann dieser Timestamp in "%%a" mit zB "20120730" in "%TS%" verglichen werden, und wenn er kleiner ist, wird gelöscht (zumindest, wenn dann das "echo" entfernt ist ...

Grüße
bastla
Bitte warten ..
Mitglied: darkangel2k3
30.09.2012, aktualisiert um 20:52 Uhr
OK vielen Dank dir =)

Es gibt wohl ein Problemchen mit dem Script, wenn die Ordner "bla bla bla bla und 14955821" gekennzeichnet sind. Dann kann den Ordner irgendwie nicht richtig durchsuchen, aber das ist egal.

Die Ordner sind normalerweise immer 8-stellig numerisch, von daher kein Problem - deshalb hat es bei mir vorher nicht so funktioniert.

Bei Zeile 8 bei dir umgehst du dann das Problem, wenn der Monat auf Null oder negativ sinkt - sehe ich das so richtig?

Wenn der Pfad C:\logs geändert werden soll, reicht es ja nur wenn ich Zeile 2 von deinem Script ändere, oder?

Nochmals vielen Dank für deine Zeit und Hilfe. Ich versuche das mal alles nachzuvollziehen, damit ich das mal bei Gelegenheit auch anpassen kann. ;)

Schönen Abend wünsche ich noch.
Bitte warten ..
Mitglied: bastla
30.09.2012 um 21:02 Uhr
Hallo darkangel2k3!
Es gibt wohl ein Problemchen mit dem Script, wenn die Ordner "bla bla bla bla und 14955821" gekennzeichnet sind.
Leerzeichen sollten eigentlich keine Schwierigkeiten machen, da ja "%%i" ohne Trennung ("delims=") erstellt und danach unter Anführungszeichen verwendet wird und in der zweiten "for"-Schleife nur "_" (und nicht das defaultmäßige Leerzeichen) als Delimiter gilt ...
Bei Zeile 8 bei dir umgehst du dann das Problem, wenn der Monat auf Null oder negativ sinkt - sehe ich das so richtig?
Yep - die zwischenzeitliche Speicherung des Monats als zB 109 anstatt 9 ermöglicht das Beibehalten der führenden Null (und umgeht das Problem, dass Zahlen, die mit 0 beginnen, bei Berechnungen in CMD als Oktalzahlen interpretiert werden - was natürlich bei 08 und 09 zu Fehlern führen würde) - deswegen der Vergleich mit dem Wert 100.
Wenn der Pfad C:\logs geändert werden soll, reicht es ja nur wenn ich Zeile 2 von deinem Script ändere, oder?
Ja - mache ich meist so, da einfach übersichtlicher (und für "*.zip" würde sich auch noch eine Variable anbieten).

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell - Dateien aus verschiedenen Arrays - Attribute vergleichen (5)

Frage von Giffas zum Thema Batch & Shell ...

Entwicklung
Versteckte .(Punkt)Dateien löschen (3)

Frage von DarkJM zum Thema Entwicklung ...

VB for Applications
gelöst Mehrere CSV Dateien aus verschiedenen Ordner einlesen via VBA (12)

Frage von mtufangil zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...