In meiner Firma habe ich im Netzwerk ein eigenes Laufwerk (M:), auf dem ich meine Daten sichern kann.
Aber: Wenn ich mit meinem Notebook unterwegs bin, dann habe ich natürlich keinen Zugriff auf Laufwerk M, ich muss also meine Dateien lokal auf Laufwerk D speichern und kann diese dann gelegentlich auf Laufwerk M zu Sicherungszwecken kopieren.
Nun gibt es ab Windows 2000 den Mechanismus der Offline-Dateien, der mir mein Laufwerk M: in gewünschter Weise synchronisieren könnte. Leider verweigert Windows die Synchronisation von einigen speziellen Dateitypen, nämlich von Access (*.MDB;*.LDB;*.MDW;*.MDE) und anderen Datenbankdateien (*.DB*), die persönliche Ordnerdatei von Outlook (*.PST) sowie *.SLM (?) Dateien.
Microsoft beschreibt zwar Sinn und Abhilfe dieser Maßnahme in einem Artikel der Knowledgebase (nach dem Motto: "It's not a bug, it's a feature"), doch dazu braucht man einen Administrator. Einfacher geht es mit folgendem Skript: Die Dateien bleiben auf dem lokalen Laufwerk D und werden über ein Skript in der Autostart-Gruppe bei jeden Systemstart auf das Netzlaufwerk kopiert.
Leider bietet Windows nur eine Autostart-Gruppe an, um beim hochfahren Programme und Skripte auszuführen - für dieses Skript wäre eine 'AutoClose'-Gruppe wesentlich sinnvoller. Aber besser automatisch beim Start gesichert, als gar nicht gesichert!
Die Installation geht so:
Den Quelltext des Skriptes in die Datei 'notebook.vbs' kopieren und die Datei speichern.
Im Skript werden die Verzeichnisse in den ersten Zeilen angepaßt:
Const Quelle = "D:\"
Mit dieser Zeile wird das Quelllaufwerk (lokales Laufwerk auf dem Notebook)
angegeben.
Const Ziel = "M:\Notebook\"
Diese Zeile bestimmt das Ziellaufwerk (Netzlaufwerk), in dem die Kopien der
lokalen Dateien abgelegt werden.
Man kann das Skript jederzeit ausführen, indem man im Menü Programme/Autostart auf das Skript klickt
Damit das Skript läuft, sollte man es also in die Autostartgruppe kopieren, unter Windows 9x ist das das Verieichnis 'C:\WINDOWS\Startmenü\Programme\Autostart'
Beide Pfade müssen mit einem Backslash (\) enden
Beim Ersten Start des Skriptes läuft es besonders lange, da alle Dateien erstmalig gesichert werden müssen. Später werden nur noch die geänderten Dateien gesichert, so dass das Skript entsprechend schnell läuft. Um zu prüfen, ob das Skript noch läuft, kann man den Task-Manager aufrufen (Strg+Alt+Entf oder C:\Windows\Taskman.exe) und im Register Prozesse nach der Wscript.exe suchen. Diese führt das Skript aus und über das Beenden dieses Prozesses kann man das Skript auch ohne weitere Folgen abbrechen.
Das Skript überschreibt auf dem Netzlaufwerk M zwar gleichnamige Dateien, führt aber keinen Abgleich mit den Dateien auf Laufwerk D durch, das heißt, wenn auf D eine Datei gelöscht wurde, bleibt sie auf Laufwerk M liegen. Einerseits ist dies ein guter Schutz, um unvorsichtig gelöschte Dateien doch noch einmal zu retten, andererseits wächst das Netzlaufwerk immer weiter. Auch das Umbenennen von Verzeichnissen oder Dateien führt dazu, daß die Dateien auf dem Netzlaufwerk doppelt abgelegt werden. Das ist kein Bug, sondern ein Feature!
Wer trotzdem sein Netzlaufwerk mal richtig aufräumen will, kann gelegentlich alle Dateien auf dem Netzlaufwerk manuell löschen und dann wieder alle Dateien im Explorer mit der Maus vom lokalen Laufwerk D auf das Netzlaufwerk M kopieren.
Nach jedem Start des Rechners meldet sich ein kleines Pop-Up-Fenster und zeigt an, wieviele Dateien gesichert wurden. Man kann dieses Fenster mit OK wegklicken, aber nach spätestens 5 Sekunden verschwindet es automatisch.
Nach dem Ende des Skriptes wird der Speicher freigegeben, es laufen keine Hintergrundprogramme weiter
Das Skript erkennt, wenn das Notebook offline ist und zeigt einen Hinweis, der nach max. 5 Sekunden automatisch verschwindet.
' Quellpfad der zu sichernden Dateien angeben
Const Quelle = "D:\"
' Ziel der Sicherung angeben
Const Ziel = "M:\Notebook\"
Dim FS, WSH, Anzahl
Const Titel = "Automatische Datensicherung"
Set FS = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
On Error Resume Next
PfadTesten Quelle
PfadTesten Ziel
Anzahl = 0
DateiSystemDurchsuchen Quelle
WSH.PopUp Anzahl & " Datei(en) von " & Quelle & " nach " & Ziel _
& " gesichert", 5, Titel, vbOKOnly + vbCritical
' *** Ende des Skripts
' ---------------------------------------------------------- '
' Rekursives Unterprogramm um das Dateisystem zu durchsuchen
' ---------------------------------------------------------- '
Private Sub DateiSystemDurchsuchen(Pfad)
Dim Ordner, UnterOrdner, Datei
If FS.FolderExists(Pfad) Then
' Then: Falls Ordner übergeben wurde
Set Ordner = FS.GetFolder(Pfad)
' Papierkorb nicht bearbeiten
If LCase(Ordner.Name) = "recycled" Then Exit Sub
' Funktion Bearbeiten() für Ordner aufrufen
Bearbeiten Ordner, False
' Alle Dateien im Ordner bearbeiten
For Each Datei In Ordner.Files
' Prozedur Bearbeiten() für Dateien aufrufen
Bearbeiten Datei, True
Next
' Alle Unterordner rekursiv bearbeiten
For Each UnterOrdner In Ordner.SubFolders
' Einstieg In die Rekursion
DateiSystemDurchsuchen UnterOrdner
Next
ElseIf FS.FileExists(Pfad) Then
' Else: Falls eine einzelne Datei übergeben wurde
Bearbeiten FS.GetFile(Pfad), True
End If
End Sub
' Hier wird festgelegt, wie Dateien bearbeitet werden sollen.
Private Function Bearbeiten(Datei, IstDatei)
Dim ZielPfad
' Schreibschutz-Attribut einer/s Datei/Ordners löschen
ZielPfad = Ziel & Mid(Datei.Path, Len(Quelle) + 1)
If IstDatei Then
If (Datei.Attributes And 32) Then
Anzahl = Anzahl + 1
Bearbeiten = True
Datei.Attributes = Datei.Attributes And Not 32
Datei.Copy ZielPfad, True
End If
Else
If Not FS.FolderExists(ZielPfad) Then FS.CreateFolder ZielPfad
End If
End Function
Private Sub PfadTesten(Pfad)
Dim TempPfad
' Existiert das Laufwerk ?
TempPfad = FS.GetDriveName(Pfad)
If Not FS.DriveExists(TempPfad) Then
WSH.PopUp "Laufwerk " & TempPfad & " existiert nicht", 5, Titel, vbCritical
WScript.Quit
ElseIf Not FS.Drives(TempPfad).IsReady Then
MsgBox "Kein Medium In Laufwerk " & TempPfad & " eingelegt", vbCritical, Titel
WScript.Quit
End If
' Existiert der Pfad ? Falls Nein, Pfad aufbauen
Pfad = Trim(Pfad)
If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\"
TempPfad = Pfad
While Not FS.FolderExists(TempPfad)
If FS.FolderExists(FS.GetParentFolderName(TempPfad)) Then
FS.CreateFolder TempPfad
' Konnte Pfad erstellt werden ?
If Not FS.FolderExists(TempPfad) Then
MsgBox "Pfad '" & TempPfad & "' kann nicht erstellt werden", vbCritical, Titel
WScript.Quit
End If
TempPfad = Pfad
Else
TempPfad = FS.GetParentFolderName(TempPfad)
End If
Wend
End Sub
| Anpassungen |
Das Script enthält am Anfang die Zeile
Die Zeile |