Unterordner verschieben per WSH

  • #1
M

Michael[Gast]

Guest
Servus!

Hab da ein kleines Problem... ich hab hier einen Ordner Backup, in dem ich meine Outlook.pst regelmäßig sichere. Dazu wird automatisch ein Ordner erstellt, welcher das aktuelle Datum enthält(sprich, Ordnerstruktur entspricht \Backup\2005-07-20\outlook.pst). Jetzt will ich per Windows Skript sämtliche Unterordner in ein anderes Verzeichnis verschieben(BackupOld), sobald der Ordner eine Gesamtgröße von 4 - 4,4 Gigabyte erreicht hat, um diese dann anschließend auf DVD zu brennen. Hab hier im Forum auch schon gesucht und nichts dazu gefunden, wie man eben nur diese UNTERORDNER verschiebt. Ich könnte natürlich rein theoretisch den kompletten Ordner Backup verschieben und gleichzeitig umbenennen und danach einen neuen Ordner Backup erstellen... nur ist hier das Problem: Der Ordner Backup ist im Netzwerk freigegeben, insofern wird das etwas schwierig ;-)

Hier mal mein bisheriger Quelltext, den ich in diesem Forum gefunden und etwas modifiziert habe:

'Dim Ordner, Datei, Quelle, unterordner, groesse, subfolder
'Set Ordner = objFso.GetFolder(x:\Backup\)

'For Each subfolder in Ordner.Files
-> unterordner = Datei.Name
-> groesse = quelle.size
-> Set subfolder = objFso.GetFile(x:\Backup\ & unterordner)
-> If groesse > 4294967296 and groesse < 4724464025 Then
objFso.MoveFolder subfolder, x:\BackupOld\ & unterordner
-> End If
'Next

Werd da allerdings irgendwie nicht schlau draus, und bin auch noch nicht wirklich bewandert auf diesem Gebiet ;-) Weiß jemand vielleicht ne Lösung? Ich will lediglich die Unterordner verschieben, nicht das Stammverzeichnis... und es muss per .vbs gemacht werden, wegen Anmeldeskript...
 
  • #2
Ersetze For Each subfolder in Ordner.Files durch For Each subfolder in Ordner.SubFolders. Du möchtest ja die Unterordner und nicht die Dateien haben.
Die Methoden .Name und .Size mußt Du in der Schleife direkt auf subfolder anwenden. subfolder ist ein Ordner aus dem Ordner.Files-Array, so hast Du es hinter For Each festgelegt.
Außerdem mußt Du zuerst mit CreateObject das Filesystem-Objekt laden!
Lade Dir die deutsche Dokumentation des Wsh herunter,
(http://download.microsoft.com/download/winscript56/Install/5.6/W98NT42KMe/DE/scr56de.exe) und lese Dir das Kapitel Script-Laufzeit/FileSystemObject durch.
 
  • #3
Hab Dank, funktioniert! Zur Vollständigkeit, hier der funktionierende Quelltext:

Option Explicit

Dim WshShell, Fso ->Shell, File System Objekt
Dim Ordner, Quelle, unterordner, groesse, subfolder

Set WshShell = CreateObject(WScript.Shell)
Set Fso = CreateObject(Scripting.FileSystemObject)

'Quell-Ordner, dessen Unterordner gesichert werden sollen
Set Ordner = Fso.GetFolder(x:\Quelle\)

groesse = Ordner.size

'Falls sämtliche Unterordner zwischen 4 und 4,4 GB erreicht haben,
'werden sie in den Ziel-Ordner verschoben
If groesse > 4294967296 and groesse < 4724464025 Then
For Each subfolder in Ordner.SubFolders
Set subfolder = Fso.GetFolder(x:\Quelle\ & subfolder.Name)
Fso.MoveFolder subfolder, x:\Ziel\ & subfolder.Name
Next
End If

'Falls die Daten zu groß sind, um auf eine DVD gebrannt zu werden, werden die Administratoren benachrichtigt
If groesse > 4724464025 Then
WshShell.exec(net send [user] Der Ordner ist zu groß fuer eine DVD)
End If
 
  • #4
Sieht gut aus! :) Allerdings könnte man die Zeile Set subfolder = Fso.GetFolder(x:\Quelle\ & subfolder.Name) ersatzlos streichen, da subfolder so bereits einen String zurückgibt, der den Namen des Ordners mit vollem Pfad zurückgibt.
D.h. subfolder ist identisch mit x:\Quelle\&subfolder.Name!
Aber man kann es auch ruhig so lassen. Ich wollte es nur des Verständnisses wegen gesagt haben.
 
Thema:

Unterordner verschieben per WSH

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.836
Beiträge
707.957
Mitglieder
51.489
Neuestes Mitglied
DonMartin
Oben