frodo2

VBS: Kopieren von Files mit Robocopy

Hallo.
Ich suche nach einer Möglichkeit, in einem VBScript mittels Robocopy einzelne Files zu kopieren. Bisher hab ich immer nur ganze Ordner kopiert. face-sad

Der allgemeine Syntax für das Kopieren von Files mit Robocopy ist ja meines Wissens nach: Robocopy "d:\Ort an dem File liegt" "D:\Ort wo das File hinsoll" "FileName.txt".

Hat jemand eine Idee, wie ich einzelne Files mittels Robocopy in VBS kopiere?

Grüße face-smile
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 219984

Url: https://administrator.de/forum/vbs-kopieren-von-files-mit-robocopy-219984.html

Ausgedruckt am: 01.05.2025 um 04:05 Uhr

colinardo
colinardo 21.10.2013 aktualisiert um 19:34:34 Uhr
Goto Top
Hallo Frodo2,
kein Problem:
Set oShell = WScript.CreateObject ("WScript.Shell")  
oShell.Run "cmd /c Robocopy.exe ""d:\Ort an dem File liegt"" ""D:\Ort wo das File hinsoll"" ""FileName.txt"""  
Grüße Uwe
Frodo2
Frodo2 22.10.2013 um 09:34:44 Uhr
Goto Top
Hallo Uwe,

Vielen Dank, klappt so!
Hast du noch eine ebenso lockere Lösung für das Umbenennen von Files mittels VBS?

Das Kopieren und Umbenennen soll in meinem Script nämlich beides passieren. face-smile

Grüße face-smile
colinardo
colinardo 22.10.2013 um 09:41:10 Uhr
Goto Top
Natürlich, du kannst aber auch ohne die Hilfe von Robocopy mit VBS kopieren, siehe dazu die Kommentare im Code:
(Wichtig bei den Zielordnern ist der Backslash am Ende)
Set fso = CreateObject("Scripting.Filesystemobject")  

'Datei verschieben  
fso.MoveFile "C:\Datei.txt", "D:\Zielordner\"  

'Datei kopieren (wenn existierende Datei überschrieben werden sollen letzten Parameter auf 'True' setzen  
fso.CopyFile "C:\Datei.txt", "D:\Zielordner\",False  

Grüße Uwe
Frodo2
Frodo2 22.10.2013 aktualisiert um 10:22:44 Uhr
Goto Top
Hi Uwe,

bin jetzt beim Kopieren + Umbenennen soweit:

Set objShell = Wscript.CreateObject ("WScript.Shell")
objShell.Run "cmd /c Robocopy.exe " & chr(34) & pfadohnefile & chr(34) & " " & chr(34) & zieldvz & chr(34) & " " & chr(34) & fileauspfad & chr(34)
'Beispiel: robocopy "D:\Test" "D:\Ort wo das File hinsoll" "neu.txt"

set FSO = CreateObject("Scripting.FileSystemObject")
set objFile = FSO.GetFile(zieldvz & "\" & fileauspfad)
'Beispiel: FSO.GetFile(D:\Ort wo das File hinsoll\neu.txt)

'Nun sollen bestimmte Endungen an den Filenamen, allerdings vor dem Punkt. So soll aus neu.txt beispielsweise neu_01.txt werden. Dafür teile ich den Namen in "neu" und ".txt", um beim Umbenennen meine gewünschte Nummer zu platzieren: filenameteil1 & "_" & meinenummer & filenameteil2 -> neu_01.txt

Pos1 = InStrRev(fileauspfad, Chr(46))
filenameteil1 = Mid(fileauspfad, 1, Pos1-1)
filenameteil2 = mid(fileauspfad, Pos1)

objFile.Name = filenameteil1 & "_" & meinenummer & filenameteil2

Das funktioniert wunderbar, wenn das File neu_01.txt noch nicht im Zielordner vorhanden ist, allerdings kommt eine Fehlermeldung, wenn doch. Hast du eine Idee, wie man das Umbenennen erzwingen kann, sprich, bestehende Files überschreiben?

Grüße
colinardo
colinardo 22.10.2013 um 10:28:26 Uhr
Goto Top
Zitat von @Frodo2:
Das funktioniert wunderbar, wenn das File neu_01.txt noch nicht im Zielordner vorhanden ist, allerdings kommt eine Fehlermeldung,
wenn doch. Hast du eine Idee, wie man das Umbenennen erzwingen kann, sprich, bestehende Files überschreiben?
steht oben in den Kommentaren im Code (Zeile 6), einfach den dritten Parameter auf True setzen...
Frodo2
Frodo2 22.10.2013 um 10:37:45 Uhr
Goto Top
Ja das habe ich probiert, bekam allerdings die Fehlermeldung Anweisungsende erwartet.
Hab es jetzt so gelöst:

if FSO.FileExists(zieldvz & "\" & filenameteil1 & "_" & meinenummer & filenameteil2) then
FSO.DeleteFile zieldvz & "\" & filenameteil1 & "_" & meinenummer & filenameteil2
end if

Danke für deine Hilfe hat mir echt geholfen face-smile

Schönen Tag noch
colinardo
colinardo 22.10.2013 um 10:47:11 Uhr
Goto Top
Ich würde dir mal die VBS und WSH Script Referenz ans Herz legen (VBS-Referenz in deutsch?)
Dann würdest du folgende Funktionen zum einfacheren Zerlegen von Dateinamen und Erweiterungen finden, dann musst du nicht mit Mid() und Co. hantieren:
fso.GetBaseName(Path)
fso.GetExtensionName(Path)
fso.GetAbsolutePathName(Path) 
Viel Erfolg
Grüße Uwe
Frodo2
Frodo2 22.10.2013 um 11:29:07 Uhr
Goto Top
Hey coool face-smile

Das ist ja praktisch face-smile und sieht auch eleganter aus als mein Firlefanz. Danke für den Tip!!

Grüße
colinardo
colinardo 22.10.2013 um 11:58:53 Uhr
Goto Top
Wenn's das dann war, den Beitrag bitte noch als gelöst markieren. Merci.
Grüße Uwe