Alte Dateien auf anderes Medium verschieben und einen Link erstellen
Hallo Community,
ich nutze administrator.de seit langer Zeit für meine tägliche Arbeit und habe hier VIEL Hilfe gefunden.
Ich habe leider zuwenig Ahnung von VB als das ich sowas selbst schreiben könnte, deshalb hier meine Frage an Euch:
Seit einiger Zeit mache ich damit rum, alte Dateien von einem Medium auf ein anderes per VB oder Batch zu verschieben, die Struktur im "Archiv" zu belassen UND gleichzeitig einen Link im Quellverzeichnis zu hinterlassen.
Habt Ihr eine Idee?
Laufwerksquellen
Originaldaten:
p:\Daten
Archivierungsdaten:
q:\Daten
Vielen Dank für Eure Hilfe und Vorschläge
ich nutze administrator.de seit langer Zeit für meine tägliche Arbeit und habe hier VIEL Hilfe gefunden.
Ich habe leider zuwenig Ahnung von VB als das ich sowas selbst schreiben könnte, deshalb hier meine Frage an Euch:
Seit einiger Zeit mache ich damit rum, alte Dateien von einem Medium auf ein anderes per VB oder Batch zu verschieben, die Struktur im "Archiv" zu belassen UND gleichzeitig einen Link im Quellverzeichnis zu hinterlassen.
Habt Ihr eine Idee?
Laufwerksquellen
Originaldaten:
p:\Daten
Archivierungsdaten:
q:\Daten
Vielen Dank für Eure Hilfe und Vorschläge
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 147586
Url: https://administrator.de/contentid/147586
Ausgedruckt am: 08.11.2024 um 21:11 Uhr
15 Kommentare
Neuester Kommentar
Hallo ceng.de,
1. Betreffend des Erzeugens von Verknüpfungen: Suchfunktion des Forums nutzen
2. Wie definierst Du "alt"? Erstellungsdatum/Datum der letzten Änderung vor einem bestimmten Datum oder liegt eine bestimmte Zeitspanne zurück oder älter als eine andere Version der Datei an einem anderen Ort?
3. Auszug aus bestehendem Code.
4. Hoffe nicht auf eine Fertiglösung.
Gruß
Friemler
1. Betreffend des Erzeugens von Verknüpfungen: Suchfunktion des Forums nutzen
2. Wie definierst Du "alt"? Erstellungsdatum/Datum der letzten Änderung vor einem bestimmten Datum oder liegt eine bestimmte Zeitspanne zurück oder älter als eine andere Version der Datei an einem anderen Ort?
3. Auszug aus bestehendem Code.
4. Hoffe nicht auf eine Fertiglösung.
Gruß
Friemler
Hallo ceng.de,
wenn Du schon delage32 verwendest, dann bleib doch bei Batch. Leite die Ausgabe von delage32 in eine Datei um, die Du mit einer FOR /F Schleife auseinander dröselst. Im Forum finden sich wie gesagt VBS-Schnipsel, die eine Verküpfung anlegen. Den Schnipsel führst Du innerhalb der FOR /F Schleife aus. Andere Beispiele im Forum zeigen, wie man ein temporäres VBScript aus einer Batchdatei erzeugt und ausführt.
[Edit]
Batch Verknüpfung erstellen mit Parametern
http://msdn.microsoft.com/en-us/library/xsy6k3ys%28VS.85%29.aspx
Gruß
Friemler
wenn Du schon delage32 verwendest, dann bleib doch bei Batch. Leite die Ausgabe von delage32 in eine Datei um, die Du mit einer FOR /F Schleife auseinander dröselst. Im Forum finden sich wie gesagt VBS-Schnipsel, die eine Verküpfung anlegen. Den Schnipsel führst Du innerhalb der FOR /F Schleife aus. Andere Beispiele im Forum zeigen, wie man ein temporäres VBScript aus einer Batchdatei erzeugt und ausführt.
[Edit]
Batch Verknüpfung erstellen mit Parametern
http://msdn.microsoft.com/en-us/library/xsy6k3ys%28VS.85%29.aspx
Gruß
Friemler
Hallo ceng.de
eventuell hier etwas in Nur-VBS.
Darauf kannst du aufbauen!
Gruss und schönes WE
Tsuki
eventuell hier etwas in Nur-VBS.
Darauf kannst du aufbauen!
Dim Pfadangabe, PfadNeu
dim ProgName, LinkPfad
Dim ObjShell
Dim objShortcut
Pfadangabe = "D:\3\"
PfadNeu = "D:\4\"
set fs = createobject("Scripting.FileSystemObject")
ListOrdner (Pfadangabe)
Sub ListOrdner(Pfadangabe)
Set ordner = fs.getfolder(Pfadangabe)
For Each file In ordner.files
Pfadangabe =File.path
temp = Split(Pfadangabe , "\")
ProgName = temp(Ubound(temp))
LinkPfad = Pfadangabe
FS.MoveFile Pfadangabe , PfadNeu
LinkAnlegen
Next
End Sub
Sub LinkAnlegen()
Set ObjShell = CreateObject("WScript.Shell")
strLPfad = LinkPfad
Set objShortcut=objShell.CreateShortcut(strLPfad & ".lnk")
objShortcut.TargetPath= PfadNeu & ProgName
objShortcut.Save
End Sub
Gruss und schönes WE
Tsuki
Kann ich das ganze noch recursive nach unten hinkriegen?
Wenn du dir in meinem Schnipsel ab Zeile 30 folgende Zeilen einfügst:
(noch in der SUB ListOrdner!)
For Each Unterordner In Ordner.subfolders
Pfadangabe = unterordner.path
Listordner unterordner
next
Gruss
Tsuki
Hallo ceng.de
Hierzu mal ein profanes Beispiel:
Ich möchte die gleiche Ordnerstruktur von C: auf D: übernehmen und es ist egal,
wieviele Ordner davon schon existieren:
Du müßtest dann einfach (in deiner Sub Archivordnerpruefung() ) den Laufwerksbuchstaben vom Originalpad ersetzen in den, vom Archivpfad.
Diese Information stände beim Spiltten dann im 0-ten Array (in meinem Beispiel wäre das tempfolder(0) ).
Anschließend den Rest vom Orignalpfad an den Archivpfad übergeben und das ganze wieder "zusammendröseln".
Ähnlich, wie in meinem Beispiel.
Bestehende Dateien im Archivpfad werden hierbei nicht überschrieben!
Probier's mal aus
Gruss
Tsuki
Ps.: Wenn du alle Funktionen hast in deinem Script, dann schauen wir zum Schluß mal nach Kosmetik
- wie ich im Unterverzeichnis die gleiche Ordnerstruktur erstelle wie im Originalverzeichnis...
Hierzu mal ein profanes Beispiel:
Ich möchte die gleiche Ordnerstruktur von C: auf D: übernehmen und es ist egal,
wieviele Ordner davon schon existieren:
OrgPfad = "C:\TestNeu\1\2\3\"
ArcPfad = "D:"
Set FSO = CreateObject("Scripting.FileSystemObject")
tempfolder = split(OrgPfad , "\")
For i = 1 to Ubound(tempfolder)
On error resume next
ArcPfad= ArcPfad & "\" & tempfolder(i)
Set OrdnerPfadNeu = FSO.CreateFolder(ArcPfad)
Next
Diese Information stände beim Spiltten dann im 0-ten Array (in meinem Beispiel wäre das tempfolder(0) ).
Anschließend den Rest vom Orignalpfad an den Archivpfad übergeben und das ganze wieder "zusammendröseln".
Ähnlich, wie in meinem Beispiel.
Bestehende Dateien im Archivpfad werden hierbei nicht überschrieben!
Probier's mal aus
Gruss
Tsuki
Ps.: Wenn du alle Funktionen hast in deinem Script, dann schauen wir zum Schluß mal nach Kosmetik
Hallo ceng.de
1) ich hol’ mir ‚nen Kaffee
2) Ich besorg mir auf’m Rückweg von der Küche einen Stift und etwas Malpapier
3) Dann schreibe ich mir nochmal alles gaaannzz langsam auf
Du möchtest:
Dateien von einem Platz in einen anderen verschieben
In den alten Ordnern nur noch die Links ablegen, die auf die Dateien zeigen
In den neuen Ordner(n) die alte Ordnerstruktur anlegen/beibehalten
Und das ganze in einem Logfile (was dann gewisse Abläufe „mitschreibt) speichern.
Fangen wir mal an:
Den Vorkopf lassen wir so, wie er schon ist
Dann lesen wir uns erst einmal (Warum auch nicht?) alle Pfade und vorhanden Dateien ein und schreiben diese in Variablen
Dann noch in Arrays geschoben. Da können wir später mittels FOR-Schleifen jede Menge Scriptzeilen sparen
Jetzt schon vielleicht die Archivpfad-Informationen ablegen in ein Array
Und schon können wir die Ordner anlegen, wohin später die Dateien hingeschubst werden sollen
So, bis hierhin haben wir noch nicht viel kaputt gemacht
Jetzt können wir auch schon die Dateien verschieben:
Was fehlt nach dem Verschieben? Rochtig! Die Links müssen erstellt werden.
Wir haben alle Infos ja noch in unseren Arrays J
So, jetzt haben wir’s soweit erst mal. Aber, genau! Das Logfile fehlt noch:
Und zum Schluß natürlich...
So, ceng.de, jetzt haben wir erst einmal deine Anforderungen soweit erfüllt.
Was jetzt noch kommt ist Kosmetik und Vereinfachung. Ich habe mal alles etwas langatmig geschrieben, damit man besser die Gedankengänge verfolgen kann.
Sicher läßt sich einiges verkürzen/schöner schreiben.
Aber.....
Gruss
Tsuki
Ps.: Das ganze sieht jetzt so aus:
Sch...ade, ich glaube, ich habe mich jetzt total verrannt und habe den Überblick verloren...
In so einem Fall mache ich immer folgendes:1) ich hol’ mir ‚nen Kaffee
2) Ich besorg mir auf’m Rückweg von der Küche einen Stift und etwas Malpapier
3) Dann schreibe ich mir nochmal alles gaaannzz langsam auf
Du möchtest:
Dateien von einem Platz in einen anderen verschieben
In den alten Ordnern nur noch die Links ablegen, die auf die Dateien zeigen
In den neuen Ordner(n) die alte Ordnerstruktur anlegen/beibehalten
Und das ganze in einem Logfile (was dann gewisse Abläufe „mitschreibt) speichern.
Fangen wir mal an:
Den Vorkopf lassen wir so, wie er schon ist
' [content:147586#580079]
' Version archivierungV03.vbs
' Script zum Verschieben von "alten" Dateien in ein anderes Verzeichnis und Link im Originalverzeichnis erstellen
' THX Tsuki ([content:79798])
' THX Friemler ([content:91808])
Dim OrgPfad, ArcPfad, ArchPfad
Dim Logdatei, Logbucheintrag, Logbuchkopf, trennlinie
Dim DatName, LinkPfad
Dim ObjShell
Dim objFSO , Fs
Dim objShortcut
Dim ArrOrig , ArrArch
'Angabe mit Backslash "\" -> Bsp: c:\programme\
OrgPfad = "C:\Test\"
OrgPfadstart = OrgPfad
ArcPfad = "D:\Archiv"
logdatei = "D:\archivierung-" & Date() & ".txt"
trennlinie = "*****************************************"
Dann lesen wir uns erst einmal (Warum auch nicht?) alle Pfade und vorhanden Dateien ein und schreiben diese in Variablen
Set objFSO = CreateObject("Scripting.FileSystemObject")
set fs = createobject("Scripting.FileSystemObject")
ListOrdner OrgPfad
Sub ListOrdner(OrgPfad)
Set ordner = fs.getfolder(OrgPfad)
' Suche nach allen Dateien im jeweiligen Pfad
' und speichere diese in einer Variable ab.
' Außer, es handelt sich um einen LINK!
For Each Datei In ordner.files
If Not LCase(Right(Datei.Path,3)) = Lcase("lnk") then
ArrOrig = ArrOrig & Datei.Path & vbcrlf
ArrArch = ArrArch & Datei.Path & vbcrlf
End If
Next
' Suche nach Unterordner
For Each Unterordner In Ordner.subfolders
Listordner unterordner
Next
End Sub
Dann noch in Arrays geschoben. Da können wir später mittels FOR-Schleifen jede Menge Scriptzeilen sparen
' Bringe die Variablen in ein Array
ArrOrig = Split(ArrOrig ,vbcrlf)
ArrArch = Split(ArrArch ,vbcrlf)
Jetzt schon vielleicht die Archivpfad-Informationen ablegen in ein Array
' Gib dem Archiv-Array die richtigen Anfangsdaten bezüglich des Ablagepfades
For i = 0 to Ubound(ArrArch)
If Not ArrArch(i) = "" then
temp = Split(ArrArch(i), "\")
temp(0) = ArcPfad
ArrArch(i) = join(temp , "\")
End If
Next
Und schon können wir die Ordner anlegen, wohin später die Dateien hingeschubst werden sollen
' jetzt legen wir uns - falls nötig! - die Ordner im Archivpfad an
For i = 0 to Ubound(ArrArch)
On Error resume next
temp = ArcPfad
Set OrdnerPfadNeu = FS.CreateFolder(temp)
temp1 = Split(ArrArch(i), "\")
temp1(Ubound(temp1)) = ""
temp2 = ArcPfad
for k = 2 to Ubound(temp1)
On Error resume next
temp2 = temp2 & "\" & temp1(k)
Set OrdnerPfadNeu = FS.CreateFolder(temp2)
Next
Next
So, bis hierhin haben wir noch nicht viel kaputt gemacht
Jetzt können wir auch schon die Dateien verschieben:
'jetzt können wir die Dateien verschieben
For i = 0 to Ubound(ArrOrig)
If Not ArrOrig(i) = "" Then
FS.MoveFile ArrOrig(i) , ArrArch(i)
'Fuer das Logfile
Logbucheintrag = Logbucheintrag & Time () & "Datei: " & ArrOrig(i) & " verschoben nach: " & ArrArch(i) & vbcrlf
End If
Next
Was fehlt nach dem Verschieben? Rochtig! Die Links müssen erstellt werden.
Wir haben alle Infos ja noch in unseren Arrays J
'und zum Schluss legen wir uns noch die Links an
Set ObjShell = CreateObject("WScript.Shell")
For i = 0 to Ubound(ArrOrig)
If Not ArrOrig(i) = "" then
strLPfad = ArrOrig(i)
Set objShortcut=objShell.CreateShortcut(strLPfad & ".lnk")
objShortcut.TargetPath= ArrArch(i)
objShortcut.Save
End If
Next
So, jetzt haben wir’s soweit erst mal. Aber, genau! Das Logfile fehlt noch:
'achso, jetzt soll auch noch ein Logfile angelegt werden.
If (objFSO.FileExists(logdatei)) Then
Set open_File = objFSO.OpenTextFile(logdatei, 8)
open_File.Close()
Else
Set open_File = objFSO.CreateTextFile(logdatei,True)
open_File.Close()
End If
Set objLogFile = objFSO.OpenTextFile(Logdatei, 8)
Logbuchkopf = trennlinie & vbCrLf _
& "Datum der Archivierung: " & Date() & vbCrLf _
& trennlinie & vbCrLf
objLogFile.Write (Logbuchkopf & Logbucheintrag)
' Schliesse Logdatei
objLogFile.Close
Und zum Schluß natürlich...
Set objFSO = Nothing
set fs = Nothing
Set ObjShell = Nothing
Msgbox "Durch!"
So, ceng.de, jetzt haben wir erst einmal deine Anforderungen soweit erfüllt.
Was jetzt noch kommt ist Kosmetik und Vereinfachung. Ich habe mal alles etwas langatmig geschrieben, damit man besser die Gedankengänge verfolgen kann.
Sicher läßt sich einiges verkürzen/schöner schreiben.
Aber.....
Gruss
Tsuki
Ps.: Das ganze sieht jetzt so aus:
' [content:147586#580079]
' Version archivierungV03.vbs
' Script zum Verschieben von "alten" Dateien in ein anderes Verzeichnis und Link im Originalverzeichnis erstellen
' THX Tsuki ([content:79798])
' THX Friemler ([content:91808])
Dim OrgPfad, ArcPfad, ArchPfad
Dim Logdatei, Logbucheintrag, Logbuchkopf, trennlinie
Dim DatName, LinkPfad
Dim ObjShell
Dim objFSO , Fs
Dim objShortcut
Dim ArrOrig , ArrArch
'Angabe mit Backslash "\" -> Bsp: c:\programme\
OrgPfad = "C:\Test\"
OrgPfadstart = OrgPfad
ArcPfad = "D:\Archiv"
logdatei = "D:\archivierung-" & Date() & ".txt"
trennlinie = "*****************************************"
Set objFSO = CreateObject("Scripting.FileSystemObject")
set fs = createobject("Scripting.FileSystemObject")
ListOrdner OrgPfad
Sub ListOrdner(OrgPfad)
Set ordner = fs.getfolder(OrgPfad)
' Suche nach allen Dateien im jeweiligen Pfad
' und speichere diese in einer Variable ab.
' Außer, es handelt sich um einen LINK!
For Each Datei In ordner.files
If Not LCase(Right(Datei.Path,3)) = Lcase("lnk") then
ArrOrig = ArrOrig & Datei.Path & vbcrlf
ArrArch = ArrArch & Datei.Path & vbcrlf
End If
Next
' Suche nach Unterordner
For Each Unterordner In Ordner.subfolders
Listordner unterordner
Next
End Sub
' Bringe die Variablen in ein Array
ArrOrig = Split(ArrOrig ,vbcrlf)
ArrArch = Split(ArrArch ,vbcrlf)
' Gib dem Archiv-Array die richtigen Anfangsdaten bezüglich des Ablagepfades
For i = 0 to Ubound(ArrArch)
If Not ArrArch(i) = "" then
temp = Split(ArrArch(i), "\")
temp(0) = ArcPfad
ArrArch(i) = join(temp , "\")
End If
Next
' jetzt legen wir uns - falls nötig! - die Ordner im Archivpfad an
For i = 0 to Ubound(ArrArch)
On Error resume next
temp = ArcPfad
Set OrdnerPfadNeu = FS.CreateFolder(temp)
temp1 = Split(ArrArch(i), "\")
temp1(Ubound(temp1)) = ""
temp2 = ArcPfad
for k = 2 to Ubound(temp1)
On Error resume next
temp2 = temp2 & "\" & temp1(k)
Set OrdnerPfadNeu = FS.CreateFolder(temp2)
Next
Next
'jetzt können wir die Dateien verschieben
For i = 0 to Ubound(ArrOrig)
If Not ArrOrig(i) = "" Then
FS.MoveFile ArrOrig(i) , ArrArch(i)
'Fuer das Logfile
Logbucheintrag = Logbucheintrag & Time () & "Datei: " & ArrOrig(i) & " verschoben nach: " & ArrArch(i) & vbcrlf
End If
Next
'und zum Schluss legen wir uns noch die Links an
Set ObjShell = CreateObject("WScript.Shell")
For i = 0 to Ubound(ArrOrig)
If Not ArrOrig(i) = "" then
strLPfad = ArrOrig(i)
Set objShortcut=objShell.CreateShortcut(strLPfad & ".lnk")
objShortcut.TargetPath= ArrArch(i)
objShortcut.Save
End If
Next
'achso, jetzt soll auch noch ein Logfile angelegt werden.
If (objFSO.FileExists(logdatei)) Then
Set open_File = objFSO.OpenTextFile(logdatei, 8)
open_File.Close()
Else
Set open_File = objFSO.CreateTextFile(logdatei,True)
open_File.Close()
End If
Set objLogFile = objFSO.OpenTextFile(Logdatei, 8)
Logbuchkopf = trennlinie & vbCrLf _
& "Datum der Archivierung: " & Date() & vbCrLf _
& trennlinie & vbCrLf
objLogFile.Write (Logbuchkopf & Logbucheintrag)
' Schliesse Logdatei
objLogFile.Close
Set objFSO = Nothing
set fs = Nothing
Set ObjShell = Nothing
Msgbox "Durch!"
Hallo ceng.de
in meinem Script oben in Zeile 20 darf als
funktionieren, da du dann doppelte Backslashes erhälst.
Das kann man aber auch noch ziemlich oben am Script (eventuell Zeile 26) abfangen mit:
Somit bekämen wir in deinem Beispiel
Probier das mal oder setze
So hattes es bei mir im Test bestens funktioniert!
Kopier mal meinen zuletzt geposteten Code Schnipsel (unter Ps.:) und teste den mal!
Gruss
Tsuki
in meinem Script oben in Zeile 20 darf als
ArcPfad = "D:\Archiv"
kein Backslash am Ende sein!!!! Dann würden beide Teile (Ordneranlegen/Dateien verschieben) nichtfunktionieren, da du dann doppelte Backslashes erhälst.
Das kann man aber auch noch ziemlich oben am Script (eventuell Zeile 26) abfangen mit:
If Right(ArcPfad,1) = "\" then ArcPfad = Left(ArcPfad , Len(ArcPfad) - 1)
C:\ArchivTest\ArcDat\
den letzten Backslash ganz rechts wieder weg.Probier das mal oder setze
ArcPfad = C:\ArchivTest\ArcDat
gleich ganz ohne Backslash am Anfang deines ScriptesSo hattes es bei mir im Test bestens funktioniert!
Kopier mal meinen zuletzt geposteten Code Schnipsel (unter Ps.:) und teste den mal!
Gruss
Tsuki
Hallo ceng.de
Mir ist noch etwas aufgefallen!
Bei meinem Test hier habe ich als Archivordner folgenden Pfad zum Testen ausgewählt
Aber wir können einen Griff in die Trickkiste wagen und starten das Script mal so durch. Hierbei wird ein kleines Fenster aufgemacht, wo der Benutzer erst einmal den Zielpfad auswählen muss. Ggf. kann/können über dieses kleine Fenster ein neuer/neue Ordner erstellt werden.
Dieses kleine Code-Schnipselchen (Ordner auswählen) ist übrigens hier aus dem Forum von unserem bastla J
teste diesen Code mal so, wie er ist. Dann bereden wir Feinheiten später. Dieser Schnipsel hat bei mir ohne Probleme funktioniert und folgende Sachen durchgeführt:
1) Archivpfad auswählen und ggf. Ordner anlegen
2) Alle Dateien im Originalverzeichnis erfassen und dann verschieben, solange es keine Links sind
3) Zum Schluss ein Logfile anlegen.
(WinXP Pro Eng)
Gruss
Tsuki
Mir ist noch etwas aufgefallen!
Bei meinem Test hier habe ich als Archivordner folgenden Pfad zum Testen ausgewählt
ArcPfad = „D:\Archiv“
In diesem Falle funktioniert meine Scriptvortgabe, selbst wenn der Ordner ARCHIV noch nicht existiert auf dem Zielpfad. Dann wird er erst einmal angelegt. Aber du möchtest ja zum Beispiel es so habenArcPfad = „D:\Archiv\Ablage\MeineDateien“ usw.
Wenn diese Ordner noch nicht existieren, haben wir ein Problem Aber wir können einen Griff in die Trickkiste wagen und starten das Script mal so durch. Hierbei wird ein kleines Fenster aufgemacht, wo der Benutzer erst einmal den Zielpfad auswählen muss. Ggf. kann/können über dieses kleine Fenster ein neuer/neue Ordner erstellt werden.
Dieses kleine Code-Schnipselchen (Ordner auswählen) ist übrigens hier aus dem Forum von unserem bastla J
' [content:147586#580079]
' Version archivierungV03_1.vbs
' Script zum Verschieben von "alten" Dateien in ein anderes Verzeichnis und Link im Originalverzeichnis erstellen
' THX Tsuki ([content:79798])
' THX Friemler ([content:91808])
' THX bastla ()
Dim OrgPfad, ArcPfad, ArchPfad
Dim Logdatei, Logbucheintrag, Logbuchkopf, trennlinie
Dim DatName, LinkPfad
Dim ObjShell
Dim objFSO , Fs
Dim objShortcut
Dim ArrOrig , ArrArch
'Angabe mit Backslash "\" -> Bsp: c:\programme\
OrgPfad = "C:\Test\"
OrgPfadstart = OrgPfad
ArcPfad = "D:\Archiv"
logdatei = "D:\archivierung-" & Date() & ".txt"
trennlinie = "*****************************************"
‚ oeffnet ein Dialogfenster zur Auswahl eines Ordners
AuswahlTitel = "Bitte Archivordner auswählen"
StartOrdner = "17"
Set Auswahl = CreateObject("Shell.Application").BrowseForFolder(0,AuswahlTitel,16,StartOrdner)
If TypeName(Auswahl) = "Nothing" Then
MsgBox "Abbruch gewählt!"
WScript.Quit
Else
Set Ordner = Auswahl.Self
ArcPfad = Ordner.Path
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
set fs = createobject("Scripting.FileSystemObject")
ListOrdner OrgPfad
Sub ListOrdner(OrgPfad)
Set ordner = fs.getfolder(OrgPfad)
' Suche nach allen Dateien im jeweiligen Pfad
' und speichere diese in einer Variable ab.
' Außer, es handelt sich um einen LINK!
For Each Datei In ordner.files
If Not LCase(Right(Datei.Path,3)) = Lcase("lnk") then
ArrOrig = ArrOrig & Datei.Path & vbcrlf
ArrArch = ArrArch & Datei.Path & vbcrlf
End If
Next
' Suche nach Unterordner
For Each Unterordner In Ordner.subfolders
Listordner unterordner
Next
End Sub
' Bringe die Variablen in ein Array
ArrOrig = Split(ArrOrig ,vbcrlf)
ArrArch = Split(ArrArch ,vbcrlf)
' Gib dem Archiv-Array die richtigen Anfangsdaten bezüglich des Ablagepfades
For i = 0 to Ubound(ArrArch)
If Not ArrArch(i) = "" then
temp = Split(ArrArch(i), "\")
temp(0) = ArcPfad
ArrArch(i) = join(temp , "\")
End If
Next
' jetzt legen wir uns - falls nötig! - die Ordner im Archivpfad an
For i = 0 to Ubound(ArrArch)
On Error resume next
temp = ArcPfad
Set OrdnerPfadNeu = FS.CreateFolder(temp)
temp1 = Split(ArrArch(i), "\")
temp1(Ubound(temp1)) = ""
temp2 = ArcPfad
ZaehlerAnfang = Split(ArcPfad , "\")
for k = (Ubound(ZaehlerAnfang) + 1) to Ubound(temp1)
On Error resume next
temp2 = temp2 & "\" & temp1(k)
Set OrdnerPfadNeu = FS.CreateFolder(temp2)
Next
Next
'jetzt können wir die Dateien verschieben
For i = 0 to Ubound(ArrOrig)
If Not ArrOrig(i) = "" Then
FS.MoveFile ArrOrig(i) , ArrArch(i)
'Fuer das Logfile
Logbucheintrag = Logbucheintrag & Time () & "Datei: " & ArrOrig(i) & " verschoben nach: " & ArrArch(i) & vbcrlf
End If
Next
'und zum Schluss legen wir uns noch die Links an
Set ObjShell = CreateObject("WScript.Shell")
For i = 0 to Ubound(ArrOrig)
If Not ArrOrig(i) = "" then
strLPfad = ArrOrig(i)
Set objShortcut=objShell.CreateShortcut(strLPfad & ".lnk")
objShortcut.TargetPath= ArrArch(i)
objShortcut.Save
End If
Next
'achso, jetzt soll auch noch ein Logfile angelegt werden.
If (objFSO.FileExists(logdatei)) Then
Set open_File = objFSO.OpenTextFile(logdatei, 8)
open_File.Close()
Else
Set open_File = objFSO.CreateTextFile(logdatei,True)
open_File.Close()
End If
Set objLogFile = objFSO.OpenTextFile(Logdatei, 8)
Logbuchkopf = trennlinie & vbCrLf _
& "Datum der Archivierung: " & Date() & vbCrLf _
& trennlinie & vbCrLf
objLogFile.Write (Logbuchkopf & Logbucheintrag)
' Schliesse Logdatei
objLogFile.Close
Set objFSO = Nothing
set fs = Nothing
Set ObjShell = Nothing
Msgbox "Durch!"
teste diesen Code mal so, wie er ist. Dann bereden wir Feinheiten später. Dieser Schnipsel hat bei mir ohne Probleme funktioniert und folgende Sachen durchgeführt:
1) Archivpfad auswählen und ggf. Ordner anlegen
2) Alle Dateien im Originalverzeichnis erfassen und dann verschieben, solange es keine Links sind
3) Zum Schluss ein Logfile anlegen.
(WinXP Pro Eng)
Gruss
Tsuki