+ Antworten
Ergebnis 1 bis 17 von 17
  1. #1
    Obergefreiter
    Registriert seit
    05.04.2011
    Ort
    Lohmar
    Beiträge
    91


    • Systeminfo
      • Notebook:
      • Toshiba L350D
      • Handy:
      • HTC Wildfire

    Standard VBS oder Batch zum verschieben von Ordner nach x Tagen

    Hallo ihr lieben,

    Ich habe ein Problem ich probiere seit Tagen etwas zu basteln das mit Ordner die älter sind als X Tage in einen anderen Ordner verschiebt.
    Dies kann per VBS oder Batch funktioniert (Am liebsten wäre mir Batch)

    Doch ich finde nothing und nichts funktioniert. Selbst Robocopy verschiebt nur Datein die älter sind als X tage und keine Ordner und wenn es Ordner verschiebt dann alle -.-

    Ich hoffe sehr ihr könnt mir helfen das Umzusetzen

    Gruß Kasino
    Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

  2. #2
    Hauptgefreiter Avatar von pointX
    Registriert seit
    14.12.2009
    Ort
    BaWü
    Beiträge
    192


    • Systeminfo
      • Motherboard:
      • altes P4 Board
      • CPU:
      • P4 @ 3,0 ghz
      • Kühlung:
      • boxed :(
      • Gehäuse:
      • standard Gehäuse
      • RAM:
      • 1,5 gig @DDR1
      • Grafik:
      • Radeo X1650
      • Storage:
      • 120gig @ 500 extern
      • Monitor:
      • 19" TFT
      • Netzteil:
      • NoName...... uralt
      • Betriebssystem:
      • XP
      • Photoequipment:
      • Canon Kompaktkamera

    Standard

    In Batch brauchst du dafür nur folgende Grundbefehle:
    for, if, move

    Liegen alle Ordner, die du überprüfen willst, in einem Ordner oder sin sie auf verschiedene Unterordner verteilet ?
    Also liegen alle unter z.B. "C:\" ("C:\ordner1","C:\ordner2","C:\ordner3") oder in verschiedenen Pfaden ("C:\abc\ordner1", "C:\def\ghi\ordner2") .... ?
    2500K, Z68-V, Team 8GB 1333, 1TB Samsung F3, Ninja 3, CM-500W

    <codec> root kann mein heim zerstören, mich aus dem system aussperen. Aber nur Gott allein entscheidet, ob ich nach /dev/null/ oder nach /var/log/ komme

  3. #3
    Obergefreiter
    Registriert seit
    05.04.2011
    Ort
    Lohmar
    Beiträge
    91
    Themenstarter


    • Systeminfo
      • Notebook:
      • Toshiba L350D
      • Handy:
      • HTC Wildfire

    Standard

    Die Ordner liegen alle in einem Ordner. Es gibt einen Ordner in dem neue Ordner jeden Tag per Batch erstellt werden.
    sagen wir es so sie liegen in C:\sicherung und sollen nach C:\alt .
    Jedoch sollen sie erst nach c:\alt verschoben werden wenn das erstellungsdatum (es gibt kein anderungsdatum das es sicherrungen sind) 30Tage zurück liegt ...

    Grueße
    Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

  4. #4
    Kapitän zur See
    Registriert seit
    17.08.2006
    Beiträge
    3.266


    Standard

    Schau dir mal das hier an: DevGuru VBScript Object: Folder

    ---------- Post added at 18:23 ---------- Previous post was at 18:21 ----------

    Sorry Edit macht mein Proxy nicht mit daher Doppelpost.

    Oben stehender Link verät dir, wie du das Alter eines Ordners prüfen kannst. Danach brauchst du noch das hier: DevGuru VBScript Object: FileSystemObject

  5. #5
    Obergefreiter
    Registriert seit
    05.04.2011
    Ort
    Lohmar
    Beiträge
    91
    Themenstarter


    • Systeminfo
      • Notebook:
      • Toshiba L350D
      • Handy:
      • HTC Wildfire

    Standard

    Ich danke dir für deine Antwort little_skunk aber von VBS habe ich absolut keine Ahnung....
    Bei VBS würde es mir nur helfen wenn mir einer direkt die Lösung geben würde oder mir Step by Step erklären würde wie es funktioniert damit ich es lernen
    Trotzdem vielen dank
    Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

  6. #6
    Kapitän zur See
    Registriert seit
    17.08.2006
    Beiträge
    3.266


    Standard

    Da steht doch schon alles inklusvie Beispielquellcode...

    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim Folder
    Set Folder = fso.GetFolder("Hier Pfad eingeben")
    if now-Folder.DateCreated>=X Tage then
    Folder.move("Hier Zielpfad eingeben")

  7. #7
    Obergefreiter
    Registriert seit
    05.04.2011
    Ort
    Lohmar
    Beiträge
    91
    Themenstarter


    • Systeminfo
      • Notebook:
      • Toshiba L350D
      • Handy:
      • HTC Wildfire

    Standard

    So ich habe jetzt mal ein bissen rumgespielt und das als Ergebnis bekommen

    Dim filesys, demofolder, createdate
    Set filesys = CreateObject("Scripting.FileSystemObject")
    Set demofolder = filesys.GetFolder("D:\test\")
    createdate = demofolder.DateCreated
    if demofolder.DateCreated >= 30 then
    demofolder.move("D:\trash\")
    end if

    Jedoch verschiebt er den kompletten Ordner test in den Ordner trash... obwohl er die unterordner von test auf das Datum überprüfen soll und diese dann wenn sie älter als 30 tage sind in den Ordner trash verschieben soll

    Gruesse

    Nach weiteren Nachgucken habe ich gesehen das ich hier nur den Hauptordner Untersuche und nicht die Unterordner (Subfolders) Wenn ich jedoch das austausche wird mir gesagt das Subfolder nicht von der Methode unterstützt wird .... o.O
    Geändert von Kasino (14.02.12 um 09:55 Uhr)
    Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

  8. #8
    Kapitän zur See
    Registriert seit
    17.08.2006
    Beiträge
    3.266


    Standard

    Zitat Zitat von Kasino Beitrag anzeigen
    if demofolder.DateCreated >= 30 then
    DateCreated ist nicht das Alter sondern das Erstellungsdatum. Der Int Wert davon ist zwangsläufig größer als 30. Du musst Now-DateCreated rechnen. Das sollte hoffentlich das Alter in Tagen ergeben.

    Im if dann noch folgendes:

    For Each Subfolder in Folder.Subfolders
    <Funktion Rekursiv für jeden Subfolder aufrufen>
    Next

    if Folder.subfolders.count=0 then
    Folder.move("D:\trash\")

    Durch die Rekursion werden auch die Unterordner geprüft. Wenn der Ordner älter als 30 Tage ist und keine Unterordner hat, wird er verschoben. Wenn ein Ordner 3 Unterordner hat, die alle älter als 30 Tage sind, würde erst die Unterordner verschoben werden und danach der Partentordner.

  9. #9
    Obergefreiter
    Registriert seit
    05.04.2011
    Ort
    Lohmar
    Beiträge
    91
    Themenstarter


    • Systeminfo
      • Notebook:
      • Toshiba L350D
      • Handy:
      • HTC Wildfire

    Standard

    Okay ich möchte aber ja nur , dass er die Unterordner überprüft und diese verschiebt sollten sie älter als 30 Tage sein.
    Da gibt es doch die Möglichkeit direkt mit Subfolders zu arbeiten oder habe ich da was falsch verstanden?
    Hinzukommt das das Erstellungsdatum ausreicht da die Ordner nicht angepackt werden bzw. nicht bearbeitet werden. Es sind Ordner mit Sicherungen die jeden Tag erstellt werden und in den Ordner "vergammeln" bis sie mal benötigt werden.

    Gruesse
    Geändert von Kasino (14.02.12 um 10:16 Uhr)
    Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

  10. #10
    Kapitän zur See
    Registriert seit
    17.08.2006
    Beiträge
    3.266


    Standard

    Wenn die Ordner ihrerseits keine Unterordner haben, kannst du auf die Rekursion verzichten.

    Der 14.02.2012 ist größer als Int 30. Daher wird deine aktuelle Prüfung so nicht funktionieren. Now ist das aktuelle Datum. Now-14.02.2012 sollte 0,irgendwas ergeben. Sprich 0 Tage und der Rest ist die Uhrzeit. Now-14.01.2012 sollte 31 ergeben. Hoffentlich

    Dim filesys, demofolder, subfolder
    Set filesys = CreateObject("Scripting.FileSystemObject")
    Set demofolder = filesys.GetFolder("D:\test\")
    if now-demofolder.DateCreated >= 30 then
    for each subfolder in demofolder.subfolders
    if now-subfolder.DateCreated>=30 then
    subfolder.move("D:\trash\")
    end if
    next
    if demofolder.subfolders.count=0 then
    demofolder.move("D:\trash\")
    end if
    end if

  11. #11
    Obergefreiter
    Registriert seit
    05.04.2011
    Ort
    Lohmar
    Beiträge
    91
    Themenstarter


    • Systeminfo
      • Notebook:
      • Toshiba L350D
      • Handy:
      • HTC Wildfire

    Standard

    Ja meine Unterordner haben wieder Unterordner das sind ganze Verzeichnisse in einem Unterordern von "D:\test". Ich vrstehe das jetzt so mit derRekursion, dass er solange prüft ob in dem zu verschiebenden Ordner wieder Unterordner sind um dieses mit dem Hauptordner zu verschieben... oder ?

    Gruesse
    Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

  12. #12
    Kapitän zur See
    Registriert seit
    17.08.2006
    Beiträge
    3.266


    Standard

    Jetzt doch wieder Rekursion. Entscheid dich mal

    Nehmen wir mal folgende Struktur

    Ordner 1 - Ordner 2 - Ordner 4
    Ordner 1 - Ordner 2 - Ornder 5
    Ordner 1 - Ordner 3

    Die Rekursion würde zuerst das Alter von Ordner 1 prüfen. Wenn dieser älter als 30 Tage ist, prüft er dessen Unterordner. In diesem Fall also Ordner 2 und Ordner 3. Nehmen wir mal an Ornder 3 wäre noch nicht 30 Tage alt aber alle anderen Ordner schon. Er würde in diesem Fall die Rekursion bis Ornder 4 und 5 weiter treiben und diese dann verschieben. Dadurch hat Ordner 2 jetzt keine Unterordner mehr und wird ebenfalls verschoben. Ornder 1 hat noch einen Unterordner der nicht alt genug ist. Es bleiben also Ordner 2 und Ornder 1 übrig.

  13. #13
    Obergefreiter
    Registriert seit
    05.04.2011
    Ort
    Lohmar
    Beiträge
    91
    Themenstarter


    • Systeminfo
      • Notebook:
      • Toshiba L350D
      • Handy:
      • HTC Wildfire

    Standard

    Okay das brauche ich ja nicht ... Anhand deines Beispieles muss er bei nur überprüfen ob jeweils Ordner 1 älter als 30 Tage ist und den dann mit Unterordner in den Ordner D:\trash verschieben...
    Ich bräuchte halt nur ein VBS Script der genau diese Aufgabe übernimmt...

    Gruesse
    Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

  14. #14
    Kapitän zur See
    Registriert seit
    17.08.2006
    Beiträge
    3.266


    Standard

    Zitat Zitat von Kasino Beitrag anzeigen
    Jedoch verschiebt er den kompletten Ordner test in den Ordner trash... obwohl er die unterordner von test auf das Datum überprüfen soll und diese dann wenn sie älter als 30 tage sind in den Ordner trash verschieben soll
    Zitat Zitat von Kasino Beitrag anzeigen
    Okay das brauche ich ja nicht ... Anhand deines Beispieles muss er bei nur überprüfen ob jeweils Ordner 1 älter als 30 Tage ist und den dann mit Unterordner in den Ordner D:\trash verschieben...
    Entscheide dich wie du es haben willst und setze es einfach um. Meine Glaskugel ist anscheinend defekt. Für mich sind das nur noch Wiedersprüchliche Aussagen. Erst soll er die Unterordner prüfen dann wieder nicht.

  15. #15
    Obergefreiter
    Registriert seit
    05.04.2011
    Ort
    Lohmar
    Beiträge
    91
    Themenstarter


    • Systeminfo
      • Notebook:
      • Toshiba L350D
      • Handy:
      • HTC Wildfire

    Standard

    Okay es kann sein das ich mich schlecht ausgedrückt habe

    Ich habe ein Verzeichniss D:\test in diesem Verzechniss liegen Ordner mit Sicherungen z.b D:\test\Ordner1 , D:\test\Ordner2 , D:\test\Ordner3 . Diese Ordner 1, Ordner 2 ,Ordner 3 sollen auf ihr Erstellungsdatum überprüft werden ob sie älter als 30 Tage sind. Die Ordner die älter als 30 Tage sind sollen nun in das Verzeichniss D:\trash verschoben werden. Es spielt keine Rolle ob sie Leer oder Voll sind. Natürlich soll er wenn der Ordner voll ist der Inhalt mit verschoben werden. Jedoch spielt es keine Rolle wie alt die Daten in den Ordnern Ordner1 ,Ordner2 ,Ordner3 sind.

    Es wäre echt hilfreich wenn du mir zeigen könntest wie genau das Funktioniert. Den ich lese mich schon die letzten Tage durch jedoch bin ich anscheinend echt zu blöd dafür ...

    Gruesse
    Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

  16. #16
    Kapitän zur See
    Registriert seit
    17.08.2006
    Beiträge
    3.266


    Standard

    Dim filesys, demofolder, subfolder
    Set filesys = CreateObject("Scripting.FileSystemObject")
    Set demofolder = filesys.GetFolder("D:\test\")
    for each subfolder in demofolder.subfolders
    if now-subfolder.DateCreated>=30 then
    subfolder.move("D:\trash\")
    end if
    next

  17. #17
    Obergefreiter
    Registriert seit
    05.04.2011
    Ort
    Lohmar
    Beiträge
    91
    Themenstarter


    • Systeminfo
      • Notebook:
      • Toshiba L350D
      • Handy:
      • HTC Wildfire

    Standard

    Ahh es Funktioniert ... Vielen Vielen Dank du warst mir eine RIESEN GROßE Hilfe ....

    MFG
    Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein