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

Dateien löschen, wenn bestimmte Datei älter als x Tage ist

Frage Entwicklung Batch & Shell

Mitglied: BlaBlup

BlaBlup (Level 1) - Jetzt verbinden

10.07.2006, aktualisiert 14.07.2006, 16299 Aufrufe, 6 Kommentare

Wenn eine Hauptdatei (xyz_001.log) älter als 30 Tage ist sollen alle Dateien gelöscht werden die mit xyz_001 anfangen, auch wenn sie andere Dateiendungen haben (zum Beispiel: xyz_001-1.zip, xyz_001-bsp.log usw)

Hallo,


Ich habe das Problem das ich ein Reihe von Dateien habe die ich löschen will sobald die Hauptdatei älter als 30 Tage ist.

Hier das Beispiel zur Veranschaulichung:

Verzeichnis test

- xyz_001.zip 01.06.2006
- xyz_001.z01 01.06.2006
- xyz_001.z02 01.06.2006
- xyz_001-001.zip 10.06.2006
- xyz_001-001.z01 10.06.2006
- xyz_001.log 10.06.2006

- xyz_002.zip 01.07.2006
- xyz_002.z01 01.07.2006
- xyz_002.z02 01.07.2006
- xyz_002-001.zip 10.07.2006
- xyz_002-001.z01 10.07.2006
- xyz_002.log 10.07.2006

In diesem Beispiel sollen die Dateien xyz_001.zip und xyz_002.zip überprüft werden ob sie älter als 30 tage sind. xyz_001.zip ist älter als 30 Tage, darum sollen alle Dateien die mit xyz_001* anfangen gelöscht werden. Auch die Dateien vom 10.06, da ich mit diesen Dateien ohne die Hauptdatei nichts anfangen kann. Die Dateien haben alle (abgesehen von der Hauptdatei) unterschiedliche Datei Endungen.


Ich kenne das tool "delage", es bringt mich aber in diesem Fall auch nicht weiter. Ich habe schon gegoogelt und auch in diesem Forum gesucht, aber nichts gefunden was mich wirklich weiter bringt.

Vielen Dank im Voraus
BlaBlup
Mitglied: Metzger-MCP
10.07.2006 um 15:51 Uhr
Warum so Kompliziert.

Sortiere doch einfach in einem Explorer Fenster die Datein nach Datum. Makiere die erste bis letzte löschbare Datei -> Fertig. das jeden Tag.

So wie ich das erkenne, kannst du noch niemals am Dateianfang oder Ende etwas festmachen. Welche Datein gelöscht werden können, ausser Datum.

Schaue mal nach einer Batchdatei !

Mit freundlichen Grüßen Metzger
Bitte warten ..
Mitglied: BlaBlup
10.07.2006 um 16:47 Uhr
Weil es zu aufwändig wäre es jeden Tag zu machen.

Ich kann es schon am Dateinamen Festmachen, da für die Hauptdatei (die die überprüft werden soll) schon über ein suchmuster zu Filtern ist. "xyz_*.zip" Damit bekomme ich alle Dateien die nach Datum überprüft werden müssen. Ich hbe auch eine vbs Script welches alle Dateien auf die diese Suchmuster zutrift löscht, aber ich kenne mich in vbs nicht gut genug aus um da Strings auseinander zu nehmen. Außerdem bin ich für jeden anderen vorschlag (zb. Batch-Datei) offen.

Aber hier mal soweit wie ich es mit vbs und dem Internet hinbekommen habe:

DIM fs,mFolder,f,fc,f1,checkpath,olderthan

'in diesem Ordner wird nach alten Files gesucht
checkpath = "C:\temp\"
'soviele Tage alt dürfen die Files sein
olderthan = 30


set FS = CreateObject("scripting.filesystemobject")
Set f = fs.GetFolder(checkpath)
Set fc = f.Files

For Each f1 in fc
if InStr(2, f1.name, "xyz_") >0 Then 'jede Datei in der xyz_ vorkommt
if InStr(2, f1.name, ".zip") >0 Then 'jede Datei die die endung .zip hat
filedate = cdate(left(f1.datelastmodified,10))

if filedate <= (date - olderthan) then
fs.DeleteFile f1
end if
end if
end if
Next



Ich weiß es ist keine sauber Programmiertes Tool, aber ich habe noch nie mit vbs gearbeitet, und mir viel keine Lösung über Batchdateien ein.
Bitte warten ..
Mitglied: Biber
10.07.2006 um 20:44 Uhr
Moin BlaBlub,

Auf meinem Rechner würde ich es wahrscheinlich mit einem Oneliner vom CMD-Prompt aus machen...
01.
>for %i in (*.log) do @for /f "tokens=1-3,5-7 delims=. " %a in ("%~ti %date%") do @ECHO set /a "datediff= %f*365 + %e*30 + %d - %c*365 - %b*30 -%a" && if !datediff! GEQ 30 del /Y "%~dpn*.*">nul
...der würde als Bätch und auf ein paar Zeilen gestreckt so aussehen
01.
@echo Off & setlocal EnableDelayedExpansion 
02.
PushD "x:\mein\LogVerzeichzeichnis" 
03.
for %%i in (*.log) do ( 
04.
      for /f "tokens=1-3,5-7 delims=. " %%a in ("%%~ti %date%") do ( 
05.
                ECHO set /a "datediff= %%f*365 + %%e*30 + %%d - %%c*365 - %%b*30 -%%a" && if !datediff! GEQ 30 del /Y "%%~dpn*.*">nul  
06.
)) 
07.
PopD
...aber ich gebe zu, erst der Output hilft, den Source nachzuvollziehen.
Output vom CMD-Oneliner oben:
01.
set /a "datediff= 2006*365 + 07*30 + 10 - 2006*365 - 01*30 -12" 
02.
set /a "datediff= 2006*365 + 07*30 + 10 - 2006*365 - 07*30 -06" 
03.
set /a "datediff= 2006*365 + 07*30 + 10 - 2006*365 - 07*30 -03" 
04.
set /a "datediff= 2006*365 + 07*30 + 10 - 2006*365 - 07*30 -05" 
05.
set /a "datediff= 2006*365 + 07*30 + 10 - 2004*365 - 03*30 -18" 
06.
set /a "datediff= 2006*365 + 07*30 + 10 - 2003*365 - 11*30 -10"
.......das heißt, ich rechne einfach (überschlägig) die Datumswerte von Datei- und heutigen Datum [= ("%%~ti %date%") ] um in Tage und bilde die Differenz.
Wenn größer als 30 [Tage], wird Parent-Logdatei und alle Child-Logdateien gelöscht.

Nein, komm zurück, sollte ein Spaß sein...

So etwas würde ich auch keinem Kollegen anbieten...
... das funktioniert zwar, aber ist natürlich so nicht wartbar oder in meinen drei Tagen Jahresurlaubs von irgendwem anpassbar.
Solche Codeschnipsel, zumindest ohne Dokumentation, auf Produktivmaschinen wäre IMHO ein Kündigungsgrund.
Hab ich nur aus educational purposes zusammengebraten.

Wieder im Ernst:
Erste Option wäre für mich, den VBS-Schnipsel fertig zu stellen.
Da ist ja nichts mehr so buggy daran, dass Du es nicht mit zwei Tassen Tee hinbekommst.

Zweite Variante:
- native batch: entfällt. Da Batch NICHT in der Lage ist, mit Datumswerten zu rechnen/ Datumswerte zu vergleichen.
ABER: ich habe schon in einigen ähnlichen Batch-Fragen hier gepostet, wie Batch mit einem kleinen JS- oder VBS-Codefetzen mit der DateDiff()-Funktion zusammenspielen kann.
Such bitte über Forumssuche nach "yesterdate" ... da ist so ein Beispiel.
Wenn Du dieses Beispiel nachvollziehst und leicht variierst (als Parameter das FileDate der *.log-Datei rein, als Ausgabe Differenz in Tagen bis Heute), dann kannst Du es auch LESbar per Batch machen.

Machbare Variante Drei (die ich aus ästhetischen Aspekten ausschließen würde) wäre ein Einzeiler mit der M$-Nobelpreis-Nominierung "ForFiles.exe", die wie für Deinen Fall gemacht ist.
Link zu ForFiles.exe habe ich gestern gepostet.

Gruß
Biber
Bitte warten ..
Mitglied: BlaBlup
11.07.2006 um 08:27 Uhr
Ja, prinzipell funktioniert mein Tool ja auch, nur das es halt nur die Hauptdatei löäscht und nicht die anderen Dazugehörigen Dateien. Und bisher habe ich auch noch nicht die nötige Funktion gefunden die das tut was ich brauche.

Ich dachte daran es irgendwie in der art zu machen:

Die letzten 4 Zeichen von dem Dateinamen abschneiden (.zip)
Ein cmd Befehl aufrufen nach dem Muster: "del (f1.name-4Zeichen)*
.*"
Aufgelöst würde das in obigen Beispiel zum ergebniss haben: "del xyz_001*.*"
das wäre genau das was ich brauche.

Mir ist halt nur nicht klar wie ich das in vbs machen kann.
Bitte warten ..
Mitglied: Metzger-MCP
11.07.2006 um 09:50 Uhr
Schliesse Mich da Biber an.

Ich habe bis jetzt eine ganz wilde Batchdatei zusammen gestrickt.
Die zwa ein bissel aufgebläht ist, aber doch um so einfacher zu verstehen ist.

Leider scheitere ich aber bei dem vergleich 2er Variablen.
Aber vielleicht kann Biber mir da weiter helfen um meine Datei vertig zu stellen.

Mit freundlichen Grüßen Metzger
Bitte warten ..
Mitglied: BlaBlup
14.07.2006 um 08:34 Uhr
Vielen Dank für eure Hilfe.

Ich habe mein Script jetzt vervollständigt, und noch erweitert, nachdem ich mich vorgestern Abend mal mit vbs auseinander gesetzt habe!

Habe inzwischen noch die option die Logdatei hinterher per Mail zu versenden.
Naja der "Quellcode würde hier den Rahmen sprengen da er inzwischen (wegen den andern funktionen usw.) auf etwa 280 Zeilen angeschwollen ist. Aber wer Interesse hat kann sich ja bei mir melden.


Mit freundlichen Grüßen
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Entwicklung
Versteckte .(Punkt)Dateien löschen (3)

Frage von DarkJM zum Thema Entwicklung ...

Batch & Shell
gelöst Source löschen wenn Datei im Zielordner vorhanden (1)

Frage von functionstrut zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...