Zum Inhalt wechseln


Foto

Ordner mit Batch nach xx Tagen löschen.


  • Bitte melde dich an um zu Antworten
45 Antworten in diesem Thema

#1 Braintee

Braintee

    Junior Member

  • 114 Beiträge

 

Geschrieben 17. April 2009 - 09:50

Hallo,

ich habe jetzt schon recht viel gesucht und auch schon viele Sachen getestet aber irgendwie funktioniert keines von diesen ganzen Scripten. Ich möchte eigentlich nur eine Batch Datei, welche mir Ordner löscht die älter sind als 14 Tage.
Bitte schickt mir keine Links mit irgendwelchen Tools, ich habe schon alles probiert was ich selbst mit 4 Stunden googlen gefunden habe. Vielleicht hat aber jemand selbst so eine Batch Datei im Einsatz wo er weiß das die auch wirklich funktioniert.

Danke
Gruß Braintee

#2 mkeil

mkeil

    Newbie

  • 31 Beiträge

 

Geschrieben 17. April 2009 - 10:01

Hi,

keine Batch... aber Powershell, sollte gehen:

$date = Get-Date
$older = 14
$files = get-childitem -Path ... | Where-Object {($date - $_.LastWriteTime).Days -gt $older}


Dann hast Du alle Dateien in $files und kannst sie durchlaufen (foreach)..

#3 Braintee

Braintee

    Junior Member

  • 114 Beiträge

 

Geschrieben 17. April 2009 - 10:33

Hallo mkeil,

danke für Deine Antwort. Ich habe allerdings ein Windows 2003 Server und müsste dann wahrscheinlich erst die Powershell installieren damit ich Dein Script nutzen kann. Das nächste Problem ist, das ich das unten stehende zwar grob verstehe aber nicht weiß wie ich jetzt weitermachen könnte.
Ich denke der Weg würde schon wieder in Richtung, ich habe keine Ahnung aber versuche mir das mal anzueignen gehen. Dieser Weg ist ja grundsätzlich nicht schlecht aber nach mehreren Stunden erfolgreichen probieren und testen suche ich jetzt einfach etwas fertiges. Ich denke ihr könnt das verstehen.

Für alle die schon was fertiges im Einsatz haben immer her damit. Ein fertiges VBS geht natürlich auch aber einzelne Zeilen wo sozusagen der Anfang gemacht ist damit komme ich wie gesagt nicht richtig klar. Für alle die jetzt vielleicht meinen ich will einfach nur ne Lösung ohne vorher selbst geschaut zu haben, denen kann ich nur sagen, ich habe geschaut und nichts gefunden, was auch wirklich funktioniert.

Gruß Braintee

#4 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 17. April 2009 - 11:39

Sollen die Ordner nach "Datum der Erstellung" oder "Datum der letzen Änderung" aussortiert werden?
Sollen die kpl. Ordner, unabhängig davon, wie alt die enthaltenen Dateien sind, gelöscht werden?

Hier ein VB-Script, das die Ordner nach "Datum der Erstellung" kpl. löscht:

strRootFolder = Inputbox("Bitte Startverzeichnis eingeben:")
if Trim(strRootFolder) <> "" then
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set folder = fso.GetFolder(strRootFolder)

  'Durchlaufe alle Unterverzeichnisse
  for each subfolder in folder.subfolders
    KillFolderSub subfolder
  next

  MsgBox "Fertig"
End if

Sub KillfolderSub(objFolder)

  'Durchlaufe alle Unterverzeichnisse
  for each subfolder in objfolder.subfolders
    KillFolderSub subfolder
  next

  'Wenn Ordner vor mehr als 14 Tagen erstellt wurde...
  if objFolder.datecreated < (Date - 14) then

    'Alle Dateien im Ordner löschen
    for each file in objfolder.Files
      fso.DeleteFile(file.Path)
    next

    'Ordner löschen
    fso.DeleteFolder(objFolder.Path)
  end if

End Sub

... allerdings eine "Grobfassung". Könnte bei Bedarf etwas verfeinert werden.

Übrigens: Es reicht nicht, "datecreated" durch "datelastmodified" zu ersetzen, wenn das Änderungsdatum gewünscht wird, da diese Änderungsdatum sich auf das aktuelle Datum ändert, wenn in Unterordnern Dateien gelöscht werden!
My name is Frank, you can say you to me.

#5 humpi

humpi

    Board Veteran

  • 1.123 Beiträge

 

Geschrieben 17. April 2009 - 11:50

Hallo,
oder einfach mit Delage32

Gruss Christian
Wenn dir etwas logisch erscheint, frag lieber nochmal nach.

#6 Braintee

Braintee

    Junior Member

  • 114 Beiträge

 

Geschrieben 17. April 2009 - 12:19

Hallo,

@cybquest

Habe Dein Script mal probiert bekomme allerdings die Fehlermeldung.

Zeile 22:
Zeichen 3:
Fehler Objekt erfoderlich:'objFolder'
Code:800A01A8

Ich weiß jetzt nicht genau wo da der Fehler liegt aber vielleicht weißt Du das ja.

@humpi

Das Tool habe ich natürlich probiert aber damit kann man keine Ordner löschen. Aber trotzdem danke für den Tipp.

Gruß Braintee

#7 humpi

humpi

    Board Veteran

  • 1.123 Beiträge

 

Geschrieben 17. April 2009 - 12:23

Hallo Braintee,

kann man doch. Mache ich auch so. Nimm mal die Schalter /recurse und /rd

Gruss
Wenn dir etwas logisch erscheint, frag lieber nochmal nach.

#8 Dukel

Dukel

    Board Veteran

  • 9.252 Beiträge

 

Geschrieben 17. April 2009 - 12:25

Hi,

keine Batch... aber Powershell, sollte gehen:


Dann hast Du alle Dateien in $files und kannst sie durchlaufen (foreach)..


Oder gleich mit der pipe weitermachen und nicht alles 2x durchgehen.

#9 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 17. April 2009 - 12:29

Sorry, mein Fehler. Nu sollte es laufen...
strRootFolder = Inputbox("Bitte Startverzeichnis eingeben:")
if Trim(strRootFolder) <> "" then
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set ofolder = fso.GetFolder(strRootFolder)

  'Durchlaufe alle Unterverzeichnisse
  for each folder in ofolder.subfolders
    KillFolderSub folder
  next

  MsgBox "Fertig"
End if

Sub KillfolderSub(objFolder)

  'Durchlaufe alle Unterverzeichnisse
  for each subfolder in objfolder.subfolders
    KillFolderSub subfolder
  next

  'Wenn Ordner vor mehr als 14 Tagen erstellt wurde...
  if objFolder.datecreated < (Date - 14) then

    'Alle Dateien im Ordner löschen
    for each file in objfolder.Files
      fso.DeleteFile(file.Path)
    next

    'Ordner löschen
    fso.DeleteFolder(objFolder.Path)
  end if

End Sub

My name is Frank, you can say you to me.

#10 Braintee

Braintee

    Junior Member

  • 114 Beiträge

 

Geschrieben 17. April 2009 - 12:56

Hallo,

@Cybquest

ich habe das Script jetzt getestet und es läuft. Ich wollte jetzt mal selbständig das Script so ändern das ich einfach den pfad fest vorgebe um später das ganze als geplanten Task laufen lassen zu können. Klar hat natürlich nicht funktioniert. Ich habe einfach mal den Pfad oben reingeschrieben und die Inputbox raugelöscht. Er bringt mir zwar keine Fehlermeldung aber funktionieren will es auch nicht. Weiterhin habe ich die Message Box entfernt da ich diese ja dann nicht mehr brauche wenn es funktioniert. Hast Du vielleicht nochmal eine Minute um mir zu sagen was ich falsch gemacht habe ? Danke


@humpi

also ich meine das ich auch sämtliche Schalter versucht habe aber Ordner löschen bzw. Unterordner das hat nicht funktioniert. Wenn Du sagst das es bei Dir funktioniert, kannst Du mir dann mal deine Komandozeile schicken womit Du das machst ?


@Dukel

Danke ist nett gemeint aber ich bin "Programmier bzw. Scripttechnisch" nicht so fit.


Gruß Braintee

#11 humpi

humpi

    Board Veteran

  • 1.123 Beiträge

 

Geschrieben 17. April 2009 - 13:04

Hallo,

bei mit sieht das so aus: delage32 Laufwerk\Verz\*.* 14 /recurse /rd
Wenn dir etwas logisch erscheint, frag lieber nochmal nach.

#12 Braintee

Braintee

    Junior Member

  • 114 Beiträge

 

Geschrieben 17. April 2009 - 13:25

Hallo humpi,


Hier mal ein Auszug von der Homepage wo DelAge beschrieben wird.

Delage32 deletes files, and optionally removes empty folders. Delage32 was not designed to delete directory structures depending on the age of the folder, regardless of the age of the files inside.

Ich habe es dennoch mal testweise versucht und mit Preview die Ordner und Dateien angeschaut welche er löschen würde. Das was ich gelöscht haben möchte ist nicht dabei. Es wird funktioniert so also nicht.

Gruß Braintee

#13 humpi

humpi

    Board Veteran

  • 1.123 Beiträge

 

Geschrieben 17. April 2009 - 13:33

Hallo,
bei mir löscht er alle Dateien, die älter als X Tage sind. Danach die leeren Ordner. Die kommen zum Schluss dran. Im Preview habe ich mir das allerdings noch nicht angeschaut.
Wenn dir etwas logisch erscheint, frag lieber nochmal nach.

#14 Cybquest

Cybquest

    Expert Member

  • 1.882 Beiträge

 

Geschrieben 17. April 2009 - 18:32

Hast Du vielleicht nochmal eine Minute um mir zu sagen was ich falsch gemacht habe ?


Da Du den geänderten Code hier nicht reingeschreiben hast, kann ich Dir schwer sagen, was DU falsch gemacht hast ;)

Wenn der Pfad fest rein kommt, kann auch der "If..."-Teil weg.
So sollte es gehen:
strRootFolder = "C:\MeinOrdner"

Set fso = CreateObject("Scripting.FileSystemObject")
Set ofolder = fso.GetFolder(strRootFolder)

'Durchlaufe alle Unterverzeichnisse
for each folder in ofolder.subfolders
  KillFolderSub folder
next


Sub KillfolderSub(objFolder)

  'Durchlaufe alle Unterverzeichnisse
  for each subfolder in objfolder.subfolders
    KillFolderSub subfolder
  next

  'Wenn Ordner vor mehr als 14 Tagen erstellt wurde...
  if objFolder.datecreated < (Date - 14) then

    'Alle Dateien im Ordner löschen
    for each file in objfolder.Files
      fso.DeleteFile(file.Path)
    next

    'Ordner löschen
    fso.DeleteFolder(objFolder.Path)
  end if

End Sub

My name is Frank, you can say you to me.

#15 Braintee

Braintee

    Junior Member

  • 114 Beiträge

 

Geschrieben 18. April 2009 - 00:03

Hallo Cybquest,

fast perfekt. Erstmal Danke. Er löscht jetzt das was ich möchte. Ich möchte das Script eventuell universeller einsetzten und vielleich auch mal Ordner löschen wo Setup.exe Dateien oder sonstige Systemdateien enthalten sind.
Er bricht bei diesen Dateien ab und bringt einen Laufzeitfehler. Was auch noch gut wäre wenn man alles was er gelöscht hat in eine Log Datei schreiben könnte. Ich weiß jetzt nicht wo groß der Aufwand wäre um das so umzuschreiben.
Soll jetzt nicht danach aussehen "Da gibt man ihm den kleinen Finger und schon ist die ganze Hand weg"
Wenn Du keine Lust mehr dazu hast, ist das auch kein Problem dann schau ich mal weiter. Trotzdem nochmal Danke dafür.

Gruß Braintee