Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
08.12.2018, 14:53
(Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2018, 14:53 von Kuwer.)
Hallo EasY,
dem "Vorschlag"
(08.12.2018, 14:16)snb schrieb: Lösche 'Option Explicit'
halte ich entgegen: Option Explicit, Intellisense und Techniken des Schreibens
Gruß Uwe
Registriert seit: 06.12.2015
Version(en): 2016
08.12.2018, 15:52
(Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2018, 15:52 von Fennek.)
Hallo,
"ForFiles" kannte ich auch nicht, ist aber sehr interessant.
Aber: ging NICHT
Ging
Code: ForFiles /D 01.11.2018
Diese relative Datumsangabe lief unter Win10 nicht. Ist das korigierbar?
mfg
(edit: in der "Steinzeit" (=vor Windows) wurde auch so etwas genutzt
for /F %i in (*.txt) do @echo %i)
((auch für das LAN:
for /L %i in (20,1,99) do ping -n 1 192.168.178.%i
dann arp -a))
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
hier mal was etwas ausführlicheres …
Sub Behalte_8()
'Variablendeklarationen
Dim strShell$, strCmd$ 'String
Dim objWsh 'Object
'Variablen fuer Wsh
Dim waitOnReturn: waitOnReturn = True
Dim windowStyle: windowStyle = 3
'wsh setzen
Set objWsh = CreateObject("WScript.Shell")
'Verzeichnis für wsh festlegen
objWsh.currentdirectory = "c:\temp"
'Command-String bilden. Dir - Ausgabe nach Datum sortiert. Skip ueberspringt n Eintraege,
strCmd = """for /f ""skip=8 delims="" %i in ('dir /a-D /o-d /b *.log') do Del ""%~i"""""
strCmd = "cmd.exe /C " & strCmd
'Cmd ausfuehren
objWsh.Run strCmd, windowStyle, waitOnReturn
End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0
Der Ansatz von SNB ist auch gut, allerdings wird da erst mal entsprechend der Dir-Option nur ein File berücksichtigt. Da muss noch bisschen was gemacht werden, damit die n jüngsten Dateien behalten werden …
@Fennek
"Diese relative Datumsangabe lief unter Win10 nicht. "
Was bedeutet das? Ist einfach nix passiert? Kam eine Fehlermeldung? Kommt was falsches? …
Ich bekomme damit was: forfiles /D -8 /C "cmd /c echo @file"
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 29.09.2015
Version(en): 2030,5
Zitat:Der Ansatz von SNB ist auch gut, allerdings wird da erst mal entsprechend der Dir-Option nur ein File berücksichtigt. Da muss noch bisschen was gemacht werden, damit die n jüngsten Dateien behalten werden …
@Kuwer
Offensichtlich nicht getestet ?
Weist du was /o d bedeutet ?
Die älteste Backup sollte gelöscht werden.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen snb,
Zitat:Die älteste Backup sollte gelöscht werden.
… ist nur die eine Hälfte der Anforderung. Dazu kommt
Zitat:die Krux liegt nun darin, dass nur maximal "x" Backup-Dateien vorhanden sein sollen
Wenn noch keine x Dateien vorhanden sind, wirst Du x nicht erreichen?
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 29.09.2015
Version(en): 2030,5
Ohne x zu benennen kann man dazu keine Code entwerfen.
Der TS könnte einfach x Backupfiles händisch speichern.
Registriert seit: 28.05.2017
Version(en): 365
Hi Leute,
bitte nicht streiten - ihr liefert allesamt geniale Arbeit ab :).
Vielleicht sollte ich das Projekt weiter umschreiben: Ich möchte einen Arbeitsplan in Excel erstellen. Für jede Kalenderwoche wird eine Datei angelegt. Über einen Button soll die Datei gespeichert werden, eine Backup sowie eine pdf erstellt werden.
Die pdf soll dann für die Mitarbeiter zum Draufschauen sein. Die Excel-Dateien sind den darin arbeitenden Chefs vorbehalten. Noch weiß ich nicht, wie viele Backups der selben Kalenderwoche erstellt werden sollen (da wird sich mein Chef zu äußern müssen) ... deswegen fragte ich auch nach den Anpassungen der Parameter.
@schauan
Ich habe deine Version ausprobiert ... Ich musste nur objwsh.currentdirectory anpassen, richtig?
Das Problem daran ist nun, dass sich direkt mein Bitdefender gemeldet und den cmd-Befehl angehalten hat. Ich befürchte, dass das dann auf der Arbeit genau so sein wird - ist ein recht sensibler Bereich :/. Gäbe es eine Alternative zum Löschen der Backups oder komme ich an der cmd-Methode nicht vorbei?
Gruß
Registriert seit: 28.05.2017
Version(en): 365
Jetzt habe ich auch die Version von RPP63 doch noch zum Laufen bekommen:
Code: Sub Delete_oldest_File()
Dim FSO, f, fi
Dim MinDateCreated As Date: MinDateCreated = 99999
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFolder(Environ("UserProfile") & "\Desktop\Testordner")
For Each fi In f.Files
If fi.DateCreated < MinDateCreated Then MinDateCreated = fi.DateCreated
Next
For Each fi In f.Files
If fi.DateCreated = MinDateCreated Then FSO.DeleteFile fi
Next
End Sub
Das funktioniert auch super soweit. Das Makro löscht die Datei mit dem ältesten Änderungsdatum, richtig?
Weswegen ich den Code anfangs nicht zum Laufen gebracht habe wäre Inhalt meiner nächsten Frage: Kann man den Pfad, in dem er die Datei suchen soll auch in Klarnamen dort hinschreiben? Da die Pfadstruktur noch nicht feststeht und die Struktur auch ein wenig verwurstelt ist, wäre das für mich als Einsteiger eingängiger. Sprich aus
Code: Environ("UserProfile") & "\Desktop\Testordner"
soll
Code: Environ("C:\Users\T\Desktop\Testordner")
werden.
Was ich mich auch noch frage: Kann der Code auch prüfen, dass er nur ausgeführt wird, wenn 20 oder 30 oder 40 Backupdateien vorhanden sind ... bzw "x" Backupdateien?
Gruß
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
ja, das Anpassen des Pfades und auch der Dateierweiterung - ich habe *.log - kannst Du machen. Je nach Einstellung eines Schutzprogramms kann es passieren, dass da was greift. Das löschen geschieht hier über den "Umweg" eines cmd und das wird nicht überall gern gesehen.
Beim direkten Kill aus Excel heraus müsstest Du Dir vielleicht erst einmal eine Liste der Dateien z.B. in ein Array oder eine Tabelle schreiben und wenn dieses ausreichend lang ist dann die "überzähligen" Dateien löschen, z.B.:
For Each fi In f.Files
iCnt=iCnt+1
Cells(iCnt,1) = fi.Name
Cells(iCnt,2) = fi.DateCreated
Next
Damit hättest Du auf der aktiven Tabelle in Spalte A und B die Zeiten und Namen. Dass dann noch nach Datum sortieren und dann in einer Schleife ab Zeile 9 oder welche auch immer schauen, ob was drin steht und wenn ja, Datei löschen.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 30.08.2014
Version(en): Office 365 - Beta 32 Bit
(07.12.2018, 18:23)RPP63 schrieb: @Case:
Deine Shell filtert doch nicht nach dem ältesten Erstelldatum, sondern löscht alles älter als 8 Tage.
Oder liege ich da falsch?
Hallo Ralf, :19:
mit dem Schalter " D" kann man eigentlich recht gezielt löschen: :21:
/D Datum Wählt Dateien mit einem Änderungsdatum größer
oder gleich (+), oder weniger oder gleich
(-), das angegebene Datum mit Format
"dd.MM.yyyy"; oder wählt Dateien, dessen letztes
Änderungsdatum größer oder gleich (+) dem
heutigen Datum plus "tt" Tagen oder weniger
oder gleich (-) heute minus "tt" Tagen. Gültige
Werte für "tt" sind Zahlen zwischen 0 und 32768.
Ohne Angabe wird "+" standardmäßig
verwendet.
________
Servus
Case
|