VBS oder Batch zum verschieben von Ordner nach x Tagen

Kasino

Neuling
Thread Starter
Mitglied seit
05.04.2011
Beiträge
120
Ort
Lohmar
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
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
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") .... ?
 
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
 
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 ;)
 
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")
 
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
 
Zuletzt bearbeitet:
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.
 
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
 
Zuletzt bearbeitet:
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 :d

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
 
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
 
Jetzt doch wieder Rekursion. Entscheid dich mal :d

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.
 
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
 
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

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.
 
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
 
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
 
Ahh es Funktioniert ... Vielen Vielen Dank du warst mir eine RIESEN GROßE Hilfe ;) ....

MFG
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh