frodo2
Goto Top

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

Content-Key: 219984

Url: https://administrator.de/contentid/219984

Printed on: April 20, 2024 at 00:04 o'clock

Member: colinardo
colinardo Oct 21, 2013 updated at 17:34:34 (UTC)
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
Member: Frodo2
Frodo2 Oct 22, 2013 at 07:34:44 (UTC)
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
Member: colinardo
colinardo Oct 22, 2013 at 07:41:10 (UTC)
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
Member: Frodo2
Frodo2 Oct 22, 2013 updated at 08:22:44 (UTC)
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
Member: colinardo
colinardo Oct 22, 2013 at 08:28:26 (UTC)
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...
Member: Frodo2
Frodo2 Oct 22, 2013 at 08:37:45 (UTC)
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
Member: colinardo
colinardo Oct 22, 2013 at 08:47:11 (UTC)
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
Member: Frodo2
Frodo2 Oct 22, 2013 at 09:29:07 (UTC)
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
Member: colinardo
colinardo Oct 22, 2013 at 09:58:53 (UTC)
Goto Top
Wenn's das dann war, den Beitrag bitte noch als gelöst markieren. Merci.
Grüße Uwe