Discussion:
Wie am einfachsten Ordner mit Unterordner kopieren?
(zu alt für eine Antwort)
Christian Freßdorf
2005-03-18 08:04:13 UTC
Permalink
Hi,

meine Frage zum Wochenende:

Wie kann man am einfachsten einen Ordner mit Dateien und Unterordnern von
einem Ort zu einem anderen kopieren?

-Die CopyFile-API kann nur auf Dateibasis kopieren, wenn der Dateipfad
exisitert - was nicht überprüft wird :-/
-FileSystemObject.FileCopy kann dies, aber erfolgt das wirklich synchron
und gibt es das unter allen VBA-Word-Versionen?
-xcopy kann dies auf Prompt-Ebene, arbeitet aber asynchron :-(
-...?

die synchrone Verarbeitung wäre wichtig, da ansonsten die nachfolgenden
Aktionen bzgl der kopierten/korierenden Dateien ins Leere laufen (können).

Ideen?
--
Gruß Christian
Thomas Gahler
2005-03-18 10:24:55 UTC
Permalink
Hallo Christian
Die kommt aber ziemlich früh, oder bist du schon auf dem Weg nach Hause.
Tja, bei einer 35 Stunden Woche muss man wohl schon langsam zusammen packen
;-)
Post by Christian Freßdorf
Wie kann man am einfachsten einen Ordner mit Dateien und Unterordnern von
einem Ort zu einem anderen kopieren?
Im Explorer ;-))))))
Post by Christian Freßdorf
-Die CopyFile-API kann nur auf Dateibasis kopieren, wenn der Dateipfad
exisitert - was nicht überprüft wird :-/
Dann eben die ganze Funktionalität schön zusammen bauen. Du hast dich ja in
letzter Zeit mit den Klassen beschäftigt, das wäre ein schönes Beispiel
dafür.
Post by Christian Freßdorf
-FileSystemObject.FileCopy kann dies, aber erfolgt das wirklich synchron
und gibt es das unter allen VBA-Word-Versionen?
Ich würde mal behaupten, das Teil läuft synchron (siehe Code weiter
unteren), sonst würde die MsgBox viel früher auftauchen.
Ob das '.FileSystemObject'-Objekt in allen VBA-Versionen vorhanden würde ich
mal mit Nein beantworten. Denn meines wissens gehört das Objekt zum
Scripting Host. Scripting Host gehört heute wohl zum OS, wurde das erste Mal
mit IIS 3.0 geliefert. Bei W95 muss OSR2 oder IE 4.0 installiert sein.
(Quelle: Inside Windows Scripting Host [Günter Born], gutes Buch zum Thema)


-xcopy kann dies auf Prompt-Ebene, arbeitet aber asynchron :-(
Du kannst ja ein Shell-Aufruf aus Scripting Host statt VBA machen, dort
gibt es den Parameter ob gewartet wird oder nicht ;-)



Die kleine Codesequenz läuft auch unter VBA, sobald du die 'REM' entfernt
hast.


' ========== Start XCopy.Vbs ==========
Option Explicit
REM Sub Demo()

Const ezOverwriteFiles = True
Const ezDoNotOverwriteFiles = False

funcXCopy _
"P:\Abt-FO\Autopoll", _
"C:\Temp\TestXCOPY" , _
ezDoNotOverwriteFiles

MsgBox "Fertig kopiert"
REM End Sub

' ---------- funcXCopy ---------- ----------
'Kopiert ein Verzeichnis inkl. Unterverzeichnisse
Function funcXCopy( _
ByVal CPfadQuelle, _
ByVal CPfadZiel, _
ByVal BDateienUberschreiben)

'*** Konstanten müssen deklariert werden
'Const ezOverwriteFiles = True
'Const ezDoNotOverwriteFiles = False

Const cFSO = "Scripting.FileSystemObject"

Dim oFSO

Set oFSO = CreateObject(cFSO)

oFSO.CopyFolder _
CPfadQuelle, _
CPfadZiel, _
BDateienUberschreiben
End Function
' ---------- funcXCopy ---------- ----------

' ========== Ende XCopy.Vbs ==========

--
Thomas Gahler
MVP für WordVBA

- Windows XP (SP1), Office XP (SP3)
Christian Freßdorf
2005-03-18 11:03:13 UTC
Permalink
Hallo Thomas,
Post by Thomas Gahler
Tja, bei einer 35 Stunden Woche muss man wohl schon langsam zusammen packen
;-)
35 was? Die hatte ich gestern Morgen schon zusammen :-)
Post by Thomas Gahler
Im Explorer ;-))))))
ich komm Dir gleich mal rüber =8-P
Post by Thomas Gahler
Dann eben die ganze Funktionalität schön zusammen bauen. Du hast dich ja in
letzter Zeit mit den Klassen beschäftigt, das wäre ein schönes Beispiel
dafür.
ja, das ginge, aber das Wetter ist hier so schön, da wollte ich mich nicht
lange mit beschäftigen.
Post by Thomas Gahler
Ich würde mal behaupten, das Teil läuft synchron (siehe Code weiter
unteren), sonst würde die MsgBox viel früher auftauchen.
hatte ich gehofft und es nun auch erfolgreich getestet.
Post by Thomas Gahler
mit IIS 3.0 geliefert. Bei W95 muss OSR2 oder IE 4.0 installiert sein.
(Quelle: Inside Windows Scripting Host [Günter Born], gutes Buch zum Thema)
danke, das muss an Voraussetzung genügen
Post by Thomas Gahler
-xcopy kann dies auf Prompt-Ebene, arbeitet aber asynchron :-(
Du kannst ja ein Shell-Aufruf aus Scripting Host statt VBA machen, dort
gibt es den Parameter ob gewartet wird oder nicht ;-)
und Shell ruf ich dann aus dem Explorer auf, oder wie?
Und den Parameter übergebe ich per bat-Datei, jajajaja - gib's mir

So, mache das jetzt doch per

Dim oFS As Object, ret As Variant
Set oFS = CreateObject("Scripting.FileSystemObject")
ret = oFS.CopyFolder(StPfad2, StPfad)
Set oFS = Nothing

kopiert alle Dateien und Unterordner auch im Netz.

Danke für die (erheiternden) Denkanstöße!

und ein schönes WoE!
--
Gruß Christian
Lesen Sie weiter auf narkive:
Loading...