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
+ Antworten
Ergebnis 1 bis 17 von 17
- 08.02.12, 10:31 #1
VBS oder Batch zum verschieben von Ordner nach x Tagen
Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.
- 08.02.12, 13:14 #2
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
- 08.02.12, 14:14 #3
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ßeNur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.
- 13.02.12, 18:23 #4Kapitän zur See
- Registriert seit
- 17.08.2006
- Beiträge
- 3.266
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
- 13.02.12, 22:41 #5
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.
- 13.02.12, 23:07 #6Kapitän zur See
- Registriert seit
- 17.08.2006
- Beiträge
- 3.266
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")
- 14.02.12, 07:46 #7
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.OGeändert von Kasino (14.02.12 um 09:55 Uhr)
Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.
- 14.02.12, 10:09 #8Kapitän zur See
- Registriert seit
- 17.08.2006
- Beiträge
- 3.266
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.
- 14.02.12, 10:14 #9
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.
GruesseGeändert von Kasino (14.02.12 um 10:16 Uhr)
Nur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.
- 14.02.12, 10:26 #10Kapitän zur See
- Registriert seit
- 17.08.2006
- Beiträge
- 3.266
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
- 14.02.12, 10:31 #11
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 ?
GruesseNur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.
- 14.02.12, 10:45 #12Kapitän zur See
- Registriert seit
- 17.08.2006
- Beiträge
- 3.266
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.
- 14.02.12, 11:11 #13
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...
GruesseNur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.
- 14.02.12, 11:28 #14Kapitän zur See
- Registriert seit
- 17.08.2006
- Beiträge
- 3.266
- 14.02.12, 11:35 #15
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 ...
GruesseNur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.
- 14.02.12, 11:42 #16Kapitän zur See
- Registriert seit
- 17.08.2006
- Beiträge
- 3.266
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
- 14.02.12, 11:46 #17
Ahh es Funktioniert ... Vielen Vielen Dank du warst mir eine RIESEN GROßE Hilfe
....
MFGNur, weil man vor sich eine CPU hat, muß man das Denken nicht einstellen.

LinkBack URL
About LinkBacks
Zitieren
