reni09
Goto Top

Verzeichnis kopieren mit vb

Hallo,

ich hab leider fast null Ahnung von VB, muss aber per VB Verzeichnisse (rekursiv) kopieren lassen.

Nun hab ich mir mit Hilfe des Internets ein Script zusammen "gestolpert" ... nur leider tut es nicht face-sad

Es kommt keine Fehlermeldung (mehr), aber es wird auch nix kopiert.
Könntet ihr mir bitte weiterhelfen?

Hier der aktuellste Code (glaub 8. Versuch)

Option Explicit
Dim objFSO, objFolder, strSrcFld, strDstFld

strSrcFld = "C:\temp\ipos"  
strDstFld = "C:\Dokumente und Einstellungen\admine\Desktop"  
'strDstFld = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERPROFILE%") & "\Desktop"  
Set objFSO = CreateObject("Scripting.FileSystemObject")  

If objFSO.FolderExists(strDstFld) Then
   Set objFolder = objFSO.GetFolder(strDstFld)
Else
   WScript.Echo "Ordner nicht da, er wird kopiert."  
   objFSO.CopyFolder strSrcFld, strDstFld
End If

Set objFSO = Nothing

Und das Ergebnis sollte möglichst so sein, das ich %USERPROFILE% verwenden kann.

Vielen Dank vorab!!
Gruß Renate

Content-Key: 160484

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

Printed on: April 18, 2024 at 09:04 o'clock

Member: bastla
bastla Feb 09, 2011 at 21:19:58 (UTC)
Goto Top
Hallo reni09!

Ich nehme an, das wäre eher so gemeint:
Option Explicit
Dim objFSO, strSrcFld, strDstFld
strSrcFld = "C:\temp\ipos"  
strDstFld = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\ipos"  

Set objFSO = CreateObject("Scripting.FileSystemObject")  
If Not objFSO.FolderExists(strDstFld) Then
   WScript.Echo "Ordner nicht da, er wird kopiert."  
   objFSO.CopyFolder strSrcFld, strDstFld
End If

Set objFSO = Nothing
Es könnte zwar auch %USERPROFILE% verwendet werden, allerdings ist der Desktop unmittelbar als "SpecialFolder" ansprechbar (und da der mit allergrößter Wahrscheinlichkeit vorhanden ist face-wink, bin ich davon ausgegangen, dass das Vorhandensein des Ordners "ipos" auf dem Desktop geprüft werden sollte) ...

Grüße
bastla
Member: reni09
reni09 Feb 09, 2011 at 21:29:09 (UTC)
Goto Top
Hallo und vielen Dank bastla,

ich werd das morgen auch testen ... nur war das mit dem Desktop scheinbar ein doofes Beispiel face-sad
Im wahren Leben soll das Verzeichnis wirklich direkt nach %USERPROFILE% kopiert werden.

Wie müste es dann aussehen?

Und ja, es soll zuvor auch geprüft werden, ob das Verzeichnis schon existiert face-smile

Danke und Gruß
Member: bastla
bastla Feb 09, 2011 at 21:35:46 (UTC)
Goto Top
Hallo reni09!
Im wahren Leben soll das Verzeichnis wirklich direkt nach %USERPROFILE% kopiert werden.
Dann hattest Du es ja eigentlich ohnehin schon:
strDstFld = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERPROFILE%") & "\ipos"
Grüße
bastla
Member: reni09
reni09 Feb 10, 2011 at 15:03:24 (UTC)
Goto Top
Hallo bastla,

ich danke dir wie verrückt ... so tuts jetzt face-smile *freu*

Noch eine Frage der Vollständigkeithalber:
Wenn es das Verzeichnis schon gibt, dann wird nix kopiert (logisch).
Aber das Script läuft normal weiter. Oder?
Weil dieser Teil kommt neu an den Anfang eines vorhandenen, aktiven VB-Scriptes.

Ach und noch was (weil ich dich grad so schön hier hab ;) ) ... gibts anstelle "objFSO.CopyFolder" auch was zum Ausschneiden?
(das würde ich vermutlich auch schnell im Netz finden, aber du hast es sicher sofort parat *vermut* ... Faulheit lässt grüßen, sorry)

Gruß reni
Member: reni09
reni09 Feb 10, 2011 at 17:37:26 (UTC)
Goto Top
Zitat von @reni09:
Ach und noch was (weil ich dich grad so schön hier hab ;) ) ... gibts anstelle "objFSO.CopyFolder" auch was zum
Ausschneiden?

Ich glaub ich habs: "objFSO.MoveFolder" ... stimmts? face-wink
Member: bastla
bastla Feb 10, 2011 at 19:02:39 (UTC)
Goto Top
Hallo reni09!

Ich hätte es zwar parat gehabt, war aber gerade nicht parat ... face-wink
Wenn es das Verzeichnis schon gibt, dann wird nix kopiert (logisch).
Aber das Script läuft normal weiter. Oder?
Ja.
Noch als Hinweis zu "MoveFolder": Das Verschieben auf ein anderes Laufwerk (nur falls Du's mal brauchen solltest) wird (nach meinen Erfahrungswerten) damit nicht klappen ...

Grüße
bastla
Member: TsukiSan
TsukiSan Feb 10, 2011 at 22:31:20 (UTC)
Goto Top
Noch als Hinweis zu "MoveFolder": Das Verschieben auf ein anderes Laufwerk (nur falls Du's mal brauchen solltest) wird > (nach meinen Erfahrungswerten) damit nicht klappen ...
..dafür könnte man ja "MoveHere" benutzen.
nur falls es interessiert. bastla weiß soetwas sowieso face-smile

Gruss
Tsuki
Member: bastla
bastla Feb 10, 2011, updated at Oct 18, 2012 at 16:45:49 (UTC)
Goto Top
Hallo Tsuki!

Schön, Dich wieder mal zu lesen ... face-smile
bastla weiß soetwas sowieso face-smile
Das ist jetzt aber einer Unterstellung (wahrscheinlich nur, weil ich die Tage mal ein "CopyHere" ausgegraben habe) ... face-wink

Danke jedenfalls für die Ergänzung. face-smile

Grüße
bastla
Member: reni09
reni09 Feb 11, 2011 at 11:25:08 (UTC)
Goto Top
Zitat von @bastla:
Noch als Hinweis zu "MoveFolder": Das Verschieben auf ein anderes Laufwerk (nur falls Du's mal brauchen
solltest) wird (nach meinen Erfahrungswerten) damit nicht klappen ...

Der Hinweis ist mehr als gut, denn genau so etwas hab ich vor (von D:\ nach %USERPROFILE%)
Ok, so muss ich mir also dieses "MoveHere" anschaun oder aber meine Quellen auf C:\ legen.

Ähm ... wie ist's mit "objFSO.CopyFolder"? Kann man das von einem LW auf das andere LW anwenden?

Auf jeden Fall schonmal 1000Dank für die Tipps face-smile
Gruß reni
Member: bastla
bastla Feb 11, 2011 at 17:53:57 (UTC)
Goto Top
Hallo reni09!
Ähm ... wie ist's mit "objFSO.CopyFolder"? Kann man das von einem LW auf das andere LW anwenden?
Magst Du das denn nicht selbst testen?
Das Verschieben würde jedenfalls etwa so aussehen:
Set App = CreateObject("Shell.Application")  
App.Namespace(strDstFld).MoveHere App.Namespace(strSrcFld).Items.Item
Wenn Du ".Item" weglässt, werden die nur die Ordnerinhalte unmittelbar in den Zielordner (muss bereits existieren) verschoben ...

Grüße
bastla
Member: reni09
reni09 Feb 11, 2011 at 18:28:45 (UTC)
Goto Top
Zitat von @bastla:
Hallo reni09!
> Ähm ... wie ist's mit "objFSO.CopyFolder"? Kann man das von einem LW auf das andere LW anwenden?
Magst Du das denn nicht selbst testen?

Sorry ... da hast du natürlich recht! Werd ich tun!
Das muss dann bis nächsten MI warten, denn hier hab ich nur XP in einer VM und da gibts nur C:\ face-wink

----
Das Verschieben würde jedenfalls etwa so aussehen:
Set App = CreateObject("Shell.Application")  
> App.Namespace(strDstFld).MoveHere App.Namespace(strSrcFld).Items.Item
> 
Wenn Du ".Item" weglässt, werden die nur die Ordnerinhalte unmittelbar in den Zielordner
(muss bereits existieren) verschoben ...

Das schaut ja gar nicht sooo schlimm aus *freu*
Auch das werde ich dann ab nächsten Mittwoch testen.

Vielen vielen Dank bastla!!
Und ich setz den Thread nun auch auf gelöst.

Schönes WE face-smile
Member: bastla
bastla Feb 11, 2011 at 18:33:39 (UTC)
Goto Top
Hallo reni09!

Ich will Dich ja nicht um die Wochenendruhe bringen, aber
hier hab ich nur XP in einer VM und da gibts nur C:\ face-wink
kann ich eigentlich nicht gelten lassen - VHD sind ja nicht so teuer face-wink, dass Du der VM nicht noch ein oder 2 Stück davon einbauen könntest ...

(Trotzdem face-wink) auch Dir ein schönes WE
bastla
Member: reni09
reni09 Feb 11, 2011 at 21:35:02 (UTC)
Goto Top
Zitat von @bastla:
kann ich eigentlich nicht gelten lassen - VHD sind ja nicht so teuer face-wink, dass Du der VM nicht noch ein oder 2 Stück davon
einbauen könntest ...

face-smile ja schon, aber Windows bekommt bei mir @home wirklich nur soviel Platz, wie es unbedingt sein muss.
Linux rocks *gg*
Aber ich setz mich Montag (im Urlaub face-wink ) noch mal dran.

Gruß reni
Member: reni09
reni09 Feb 16, 2011 at 14:25:31 (UTC)
Goto Top
Hallo und nochmals 1000Dank !!

Ich melde mich nur noch einmal, um meine Endlösung vorzustellen face-smile
Option Explicit
Dim objFSO, objFolder, strSrcFld, strDstFld

strSrcFld = "C:\temp\" & CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERNAME%") & "\ipos"  
strDstFld = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERPROFILE%") & "\ipos"  

Set objFSO = CreateObject("Scripting.FileSystemObject")  

If Not objFSO.FolderExists(strDstFld) Then
   objFSO.MoveFolder strSrcFld, strDstFld
End If

Set objFSO = Nothing

So tut es nun das, was ich will und im weiteren Verlauf des Scripts wird die eigentliche App gestartet.

Gruß reni face-smile
Member: bastla
bastla Feb 16, 2011 at 14:33:12 (UTC)
Goto Top
Hallo reni09!

Freut mich, dass es jetzt passt ... face-smile

Grüße
bastla

P.S.: Da Du ohnehin schon ein paar längere Zeilen dabei hast, könntest Du 9 bis 11 noch zu
If Not objFSO.FolderExists(strDstFld) Then objFSO.MoveFolder strSrcFld, strDstFld
zusammenfassen ...
Member: reni09
reni09 Feb 16, 2011 at 20:18:20 (UTC)
Goto Top
Ahhh ... supi Tipp face-smile

Danke und Gruß