Hallo,
In einem Verzeichnis C:\Quelle sind viele Dateien. Einige davon sollen in das Verzeichnis C:\Ziel kopiert werden. Die Adressen der zu kopierenden Dateien stehen in der eineer Accessabfrage namens Adressen
Es sind bei jeder Aktion unterschiedliche Dateien mit unterschiedlicher Anzahl. Ich denke also zunächst muß die Anzahl der Kopiervorgänge ermittelt werden, dann eine Schleife gestartet werden welche eine indirekte Adressierung anwendet.
Zur Verdeutlichung nochmals.Die Pfade stehen in der Abfrage Adressen welche abgearbeitet werden muß.
Vorher
C:\Quelle mit den Dateien a.txt, b.txt, c.txt, d.txt
C:\Ziel ohne Inhalt
Abfrage Adressen mit Datensatz_1: C:\Quelle\b.txt
Datensatz_2: C:\Quelle\d.txt
Nachher
C:\Quelle mit den Dateien a.txt, b.txt, c.txt, d.txt
C:\Ziel mit den Dateien b.txt, d.txt
versuchs mal mit diesem Object:
Set myFSO = CreateObject(„Scripting.FileSystemObject“)
Für Scripting.FileSystemObject gibt es in der Hilfe eine ausführliche Dokumentation
Rekursives Durchsuchen von Directories auf Festplatten ist ebenfalls gut beschrieben.
Function Kopieren(Ziel As String, Quelle As String)
Dim fso, F1, s
Set fso = CreateObject(„Scripting.FileSystemObject“)
Set F1 = fso.GetFolder(Quelle)
F1.Copy (Ziel)
eine Schleife mit While not recordset.EOF … movenext … Wend schreiben, in der
für jeden Datensatz ein String „MOVE " & Quellpfad & " C:\ZIEL“ & vbCR erstellen und in eine Datei schreiben
diese Datei z.B FLUTSCH.BAT nennen
shell „CMD FLUTSCH.BAT“ führt die Kopierbefehle aus.
Zu 2: Mit While not recordset.EOF brauchst du kein RecordCount.
Zu 3. Welcher Schreibbefehl am geschicktesten ist, musst du selber herausfinden, ich hab seit Jahren nicht mehr mit Access gearbeitet.
Alternativ könntest du
1a die MOVE-Befehle per Erstellungsabfrage in ne temporäre Tabelle schreiben
2a die Tabelle als CSV-Datei namens FLUTSCH.BAT exportieren und
5. wie gehabt ausführen
Ist vermutlich sogar einfacher und läuft schneller.
Ich erinnere mich dunkel an einen Klassenmodul namens FileSystemObject, mit dem ginge es rein in VBA, aber das macht nur Umstände.
unter der Voraussetzung, das die Abfrage Adressen immer aktuell ist, könnte Folgendes funktionieren:
dim rst as recordset, quelle as string, ziel as string
set rst=currentdb.Openrecordset(„Adressen“)
ziel=" hier den Zielpfad eingeben "
do until rst.eof
quelle=" hier den Quellenpfad eingeben " & rst!quellenname
FileCopy(quelle,ziel)
rst.MoveNext
loop