Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Argumente über ziehen und fallen lassen übergeben und strings modifizieren

Frage Entwicklung VB for Applications

Mitglied: Oreuss

Oreuss (Level 1) - Jetzt verbinden

01.08.2012, aktualisiert 02.08.2012, 3252 Aufrufe, 20 Kommentare

Sers,

ich schreibe gerade an einem Script für das "SendTo" -Menü von Windows.
Die Dateiliste mit den Pfaden zu übergeben krieg ich wohl hin, aber ich bekomme beim Ausführen nen Fehler in der 2.Zeile bei Zeichen 3 (Anweisung erwartet).

Den Rest des Scripts habe ich aus dem Internet und dem halbwissen meinerseits zusammengeklaubt.

Vielleicht mag jemand seinen Senf dazugeben.
Bin eigentlch eher in der CNC-Programmierung unterwegs und mach das Scripteschreiben dann, wenn es mir zu blöd ist 3 Explorer-Fenster nebeneinander auf den Monitor zu tapezieren.

Dank im Voraus für Kritik, Humor und Schelte.

Hier eine Aufstellung, was das Script machen soll.

- Datei-Pfad-Liste über SendTo an Script übergeben
- Pfad modifizieren
- Dateien aus Ursprungspfad in modifizierten Pfad kopieren
- eventuell ein Log ausgeben

01.
' *********************************** 
02.
' ** Konstantendeklaration 
03.
' ** Ursprungs und Zielpfad 
04.
' *********************************** 
05.
Dim ccvon, ccnach 
06.
ccvon = "Z:\CAD-Daten" 
07.
ccnach = "Z:\Rüstdaten" 
08.
' *********************************** 
09.
' ** fehlermeldung wenn keine Argumente übergeben wurden 
10.
' *********************************** 
11.
Dim iArgs 
12.
Set iArgs = WScript.Arguments 
13.
If iArgs.Count = 0 Then 
14.
	MsgBox "Ohne Argumente wird's nichts!",0,WScript.ScriptName 
15.
	WScript.Quit 
16.
End If 
17.
' *********************************** 
18.
' ** Pfade und Dateiliste ermitteln 
19.
' ** Pfadliste mit dem geforderten Eingabeverzeichnis vergleichen 
20.
' ** Fehlermeldung bei falschem Ursprungspfad 
21.
' *********************************** 
22.
Dim iipath, iifilename, vvvergl 
23.
For i = 0 to iArgs.Count - 1 
24.
	iipath(i)     = GetPath_From_FilePath(iiquelle(i)) 
25.
	iifilename(i) = GetFileName_From_FilePath(iiquelle(i)) 
26.
	vvvergl = InStr(1, iipath(i), ccvon, 1) 
27.
	if vvvergl = 0 then 
28.
		MsgBox "Diese Script kann nur aus einem Unterverzeichnis von " & ccvon & " gestartet werden!",0,WScript.ScriptName 
29.
		WScript.Quit 
30.
	End If 
31.
Next 
32.
' *********************************** 
33.
' ** Pfadliste modifizieren 
34.
' *********************************** 
35.
Dim ooziel 
36.
For i = 0 to iiquelle.Count - 1 		' ** alle Argumente holen 
37.
   'vvvtemp(i) = Text & vvvquelle.item(i) 
38.
   Replace "ooziel(i)" , "ccvon", "ccnach" 
39.
Next 
40.
' *********************************** 
41.
' ** if notexist pfade anlegen 
42.
' *********************************** 
43.
For i = 0 to ooziel.Count - 1 
44.
	if not fso.FolderExists( ooziel(i) ) then fso.CreateFolder( ooziel(i) ) 
45.
Next 
46.
' *********************************** 
47.
' ** dateien kopieren 
48.
' *********************************** 
49.
For i = 0 to ooziel.Count - 1 
50.
	fso.CopyFile "", "" ',Overwrite True 
51.
Next 
52.
' *********************************** 
53.
' ** ausgabe mit log 
54.
' *********************************** 
55.
MsgBox "Script erfolgreich beendet"
' Ich wüsste zwar was ich in das Log schreiben würde,
' habe aber keinen blassen Schimmer wie das zu bewerkstelligen ist.
WScript.Quit 'reicht für's erste


[Edit Biber] Codeformatierung. [/Edit]
Mitglied: rubberman
01.08.2012, aktualisiert um 23:30 Uhr
Hallo Oreuss.

Ich denke man müsste das einmal komplett neu schreiben Du hantierst mit Funktionen und Objekten, die nicht mal existieren etc.
Egal. Wichtig wäre, erst mal das Konzept zu klären.
1.) Du schreibst was vom SendTo Menü, im gleichen Atemzug, dass du eine Dateiliste übergeben willst und letztlich auch noch was von Drag/Drop. Ja was denn nun?
2.) Ich gehe davon aus dass alle Dateien letztlich igendwo in 'ccvon' existieren müssen, dass sie vom Script überhaupt verarbeitet werden sollen. Auch in Unterverzeichnissen? Müssen diese Unterverzeichnisse auch in 'ccnach' erstellt werden?
3.) Wie soll mit Dateien umgegangen werden, die womöglich schon in 'ccnach' existieren?
4.) Logfile. Gut dass du weißt was rein soll Was wäre das denn? Und wo soll es erstellt werden?

Fragen über Fragen ...

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
01.08.2012, aktualisiert 04.08.2012
@rubberman
Grundsätzliches ACK - geschätzt sollte das wohl etwa Folgendes werden:
01.
Von = "Z:\CAD-Daten" 
02.
Nach = "Z:\Rüstdaten" 
03.
' * 
04.
' fehlermeldung wenn keine Argumente übergeben wurden 
05.
' * 
06.
Set Args = WScript.Arguments 
07.
If Args.Count = 0 Then 
08.
    MsgBox "Ohne Argumente wird's nichts!", 0, WScript.ScriptName 
09.
    WScript.Quit 
10.
End If 
11.
 
12.
Set fso = CreateObject("Scripting.FileSystemObject") 
13.
' * 
14.
' Pfade und Dateiliste ermitteln 
15.
' Pfadliste mit dem geforderten Eingabeverzeichnis vergleichen 
16.
' Fehlermeldung bei falschem Ursprungspfad 
17.
' * 
18.
LV = Len(Von) 
19.
For Each Quellpfad In Args 
20.
    If LCase(Left(Quellpfad, LV)) <> LCase(Von) Then 
21.
        MsgBox "Dieses Script kann nur aus einem Unterverzeichnis von """ & Von & """ gestartet werden!", 0 ,WScript.ScriptName 
22.
        WScript.Quit 
23.
    End If 
24.
    If fso.FolderExists(Quellpfad) Then 
25.
        MsgBox """" & Quellpfad & """ ist ein Ordner - dieses Script kann aber nur zum Kopieren von Dateien verwendet werden!", 0, WScript.ScriptName 
26.
        WScript.Quit 
27.
    End If 
28.
    ' * 
29.
    ' Pfad modifizieren 
30.
    ' * 
31.
    Zielpfad = Replace(Quellpfad, Von, Nach, 1, 1, vbTextCompare) 
32.
    If fso.FolderExists(Zielpfad) Or fso.FileExists(Zielpfad) Then  
33.
        MsgBox """" & Zielpfad & """ existiert bereits!", 0, WScript.ScriptName 
34.
        WScript.Quit 
35.
    End If 
36.
    ' * 
37.
    ' if notexist pfade anlegen 
38.
    ' * 
39.
    ZielPfadOrdner = Split(Zielpfad, "\") 
40.
    ZielTeilPfad = ZielPfadOrdner(0) 
41.
    For i = 1 To UBound(ZielPfadOrdner) - 1 
42.
        ZielTeilPfad = ZielTeilPfad & "\" & ZielPfadOrdner(i) 
43.
        If fso.FileExists(ZielTeilPfad) Then 
44.
            MsgBox "Ordner """ & ZielTeilPfad & """ kann nicht erstellt werden!", 0, WScript.ScriptName 
45.
            WScript.Quit 
46.
        End If 
47.
        If Not fso.FolderExists(ZielTeilPfad) Then fso.CreateFolder(ZielTeilPfad) 
48.
    Next 
49.
    ' * 
50.
    ' Datei kopieren 
51.
    ' * 
52.
    fso.CopyFile Quellpfad, ZielPfad ',Overwrite True 
53.
Next 
54.
' * 
55.
' ausgabe mit log 
56.
' *** 
57.
MsgBox "Script erfolgreich beendet"
Grüße
bastla

P.S.: Wo es wohl Variablennamen der Art "ccvon" oder "iipath" zu kaufen gibt?
Bitte warten ..
Mitglied: Biber
02.08.2012 um 08:54 Uhr
[OT]
Moin bastla,
Zitat von bastla:
P.S.: Wo es wohl Variablennamen der Art "ccvon" oder "iipath" zu kaufen gibt?
Gab es in meiner Jugend auch schon - ich erinnere mich an bbking, jjcale und zztop.

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: bastla
02.08.2012 um 09:31 Uhr
[OT2]
Hallo Biber!

Das ergab dann sicher ein super Programm ...

Grüße
bastla

P.S.: Und danke, dass Du gganderson nicht erwähnt hast ...
[/OT2]
Bitte warten ..
Mitglied: Biber
02.08.2012, aktualisiert um 20:06 Uhr
[OT ii]
Zitat von bastla:
[OT2]
Hallo Biber!
P.S.: Und danke, dass Du gganderson nicht erwähnt hast ...
[/OT2]
Und vvbach, pplangstrumpf und den ttsee hab ich uns auch erspart.
[/OT ii]
Bitte warten ..
Mitglied: brammer
02.08.2012 um 15:22 Uhr
Hallo,

niveau im freien Fall.
So nannte man das früher...

brammer
Bitte warten ..
Mitglied: Oreuss
02.08.2012, aktualisiert 03.08.2012
Dank erst einmal für die rege Anteilnahme.

bezgl. der variablen mit den führenden cc vv ii oo:

Ich habe von vorn herein versucht variablen nach deren Sinn zu strukturieren

cc Konstante
vv Variable
ii Input
oo Output


@rubberman
Umriss der Funktionsweise und der Handlungen des Scipts:

- Eine Verknüpfung des Scripts soll im SendTo -Menü abgelegt sein.

- Dateien (ein oder mehrere) sollen dann über das Kontextmenü an das Script übergeben werden
=> dabei wird die Liste der Argumente erzeugt.

- Zum Verfahren bei den Pfaden sei soviel gesagt: in CAD-Daten werden Zeichnungen und andere Daten erstellt,
die über das Script in Rüstdaten bereitgestellt werden sollen

- der Algorithmus bei der Erstellung der Verzeichnisse sieht wie folgt aus:
Ursprungsordner Bereitstellungsordner
------------------------------------------------------------------------------------
Z:\CAD-Daten\1111\test.pdf Z:\Rüstdaten\1111\test.pdf
Z:\CAD-Daten\2222\test.txt Z:\Rüstdaten\2222\test.txt
Z:\CAD-Daten\1111\2222\test.pdf Z:\Rüstdaten\1111\2222\test.pdf
und so weiter und so fort.

- Das Eingangsverzeichnis wird bei der Scriptdefinition als Konstante festgelegt
und es sollen nur Unterverzeichnisse des
Eingangsverzeichnis als Argumente angenommen werden.

- nach Ausgabe einer Fehlermeldung soll es möglich sein vorhandene Dateien zu überschreiben.

- eine Auswahl der Dateien über die Windows -Suche sollte möglich sein.
=> da wird's spassig. es können mehrere "unterschiedliche" Pfade in den Argumenten sein.

- und wenn's geht sollte das Script noch nen gscheiten kaffee kochen.
der Kaffeautomat ist grausig.


@bastla:
habe mir den Entwurf angesehen und es erscheint logisch.
Würde aber lügen wenn ich jetzt sagen würde das bei mir die Groschen fallen.

Dafür befaß ich mich damit zu selten.

Nun habe ich Deinen Entwurf mal 1 zu 1 getestet und ich bekomme die gleiche Fehlermeldung wie in meiner Version.

Windows Scripting Host
Zeile: 2
Zeichen: 3
Fehler: Anweisung erwartet
Code: 800A0400
Quelle: Kompilierungsf. in ms vbs

p.s.: habe kein Office installiert.

Reite auf dem Windows Scripting Hostherum.

Im Notpad++ mit ms debugger läuft er schnurstraks in die fehlenden Argumente hinein.

Ist da was mit dem Windows Scripting Host????

Bin auf Windows 7 Ultimate 64bit SP1 unterwegs.


Folgender Quellcode als VBS gespeichert und den Link ab in's SendTo geht wie die Sau.
Die Argumente werden schön angezeigt.
Das Script ist natürlich nicht von mir, der Urspung ist auf dieseyer.de

01.
set oArgs = Wscript.Arguments 
02.
If oArgs.Count = 0 then 
03.
  MsgBox "Ohne Argumente wird's nichts!", ,WScript.ScriptName 
04.
  WScript.Quit 
05.
End If 
06.
 
07.
Text = "Das waren die Argumente:" & vbCRLF 
08.
For i = 0 To oArgs.Count - 1 '             hole alle Argumente 
09.
  Text = Text & oArgs.item(i) & vbCRLF 
10.
Next 
11.
MsgBox Text, ,WScript.ScriptName 
Bitte warten ..
Mitglied: bastla
02.08.2012, aktualisiert 03.08.2012
Hallo Oreuss!

Zum Thema Variablen: Deklariert hast Du auch brav - allerdings würde ich dann noch dringend zu "Option Explicit" raten, damit das auch Sinn bekommt ...
Fehlermeldung kann ich nicht bestätigen.
BTW: Würdest Du bitte Biber entlasten und selbst die "Code"-Formatierung vornehmen und vielleicht auch noch "dieseyer.de" richtig zitieren?

Grüße
bastla

P.S.: Deine Art der Variablenbenennung würde ich im Fall des Falles etwas einfacher / lesbarer zB
cVon 
iPfad 
vVergl
schreiben ...

[Edit] "x" nachgereicht [/Edit]
Bitte warten ..
Mitglied: 76109
03.08.2012, aktualisiert um 09:24 Uhr
[OT]
@bastla
Zum Thema Variablen: Deklariert hast Du auch brav - allerdings würde ich dann noch dringend zu "Option Eplicit" raten, damit das auch Sinn bekommt ...
Diese Option kannte ich noch garnicht

Gruß Dieter
[/OT]
Bitte warten ..
Mitglied: Oreuss
03.08.2012 um 00:58 Uhr
... hatte das vbs in das sendto kopiert anstatt eine verknüpfung darauf zu erstellen

=> nun tut es Bastla's Version

@bastla und Biber

die Code -Formatierung werde ich von nun an selbst übernehmen... sorry

die Option Explicit werde ich einsetzen.
guter Einwand
Bitte warten ..
Mitglied: Oreuss
03.08.2012 um 06:12 Uhr
es ergibt sich gerade zum debugging eine Frage die Google nicht hinreichend beantworten konnte.

Ist es möglich die Argumente zu testzwescken manuell zu deklarieren.
Bitte warten ..
Mitglied: bastla
03.08.2012, aktualisiert um 22:30 Uhr
Hallo Oreuss!
Ist es möglich die Argumente zu testzwescken manuell zu deklarieren.
Das kannst Du zB so machen:
01.
Von = "Z:\CAD-Daten" 
02.
Nach = "Z:\Rüstdaten" 
03.
' * 
04.
' fehlermeldung wenn keine Argumente übergeben wurden 
05.
' * 
06.
'Set Args = WScript.Arguments 
07.
'If Args.Count = 0 Then 
08.
'    MsgBox "Ohne Argumente wird's nichts!", 0, WScript.ScriptName 
09.
'    WScript.Quit 
10.
'End If 
11.
Set Args = Array("Z:\CAD-Daten\2222\test.txt", "Z:\CAD-Daten\1111\2222\test.pdf")
oder einfach mit einem Batch das Script starten und die Argumente mit in die Befehlszeile schreiben:
"%appdata%\Microsoft\Windows\SendTo\Kopieren.vbs" "Z:\CAD-Daten\2222\test.txt" "Z:\CAD-Daten\1111\2222\test.pdf"
Grüße
bastla
Bitte warten ..
Mitglied: bastla
03.08.2012, aktualisiert um 08:41 Uhr
[OT2] @Dieter
Diese Option kannte ich noch garnicht
Ich war auch überrascht ...

Danke, korrigiere ich der Ordnung halber oben.

Grüße
bastla
[/OT2]
Bitte warten ..
Mitglied: Oreuss
03.08.2012 um 19:23 Uhr
Sehr elegant, auch gleich die Fehlerquelle eines übergebenen Verzeichnisses abzufangen.
Auf die Idee wäre ich nicht gekommen, Nen User aber bestimmt

01.
    If fso.FolderExists(Quellpfad) Then 
02.
        MsgBox """" & Quellpfad & """ ist ein Ordner - dieses Script kann aber nur zum Kopieren von Dateien verwendet werden!", 0, WScript.ScriptName 
03.
        WScript.Quit 
04.
    End If


Aber wie ist das überhaupt mit dem Aufruf von Quellpfad in Zeile 19?
01.
For Each Quellpfad In Args 
Nirgends deklariert, einfach aufgerufen und tut.
ist das nen regulärer Ausdruck?
können die nun schon deutsch bei ms oder habe ich Tomaten auf den Augen?

wenn's nen regulärer Ausdruck ist, wie ist das auf ner englischen Windows-Version.
Bitte warten ..
Mitglied: rubberman
03.08.2012 um 21:11 Uhr
Zitat von Oreuss:
Aber wie ist das überhaupt mit dem Aufruf von Quellpfad in Zeile 19?
Nirgends deklariert, einfach aufgerufen und tut.

Das ist einfach ein Variablenname. Die Deklaration erfolgt "On The Fly", wie in VBScript möglich. Mit Option Explicit solltest du dafür aber eine Fehlermeldung einfangen

Zitat von Oreuss:
können die nun schon deutsch bei ms

Ja, die Entwickler von M$ sind alle aus Deutschland emigrierte Friesische Mähnenrinder. Wenn sie uns nicht auf die Hörner nehmen, dann lauern sie uns zumindest im Dickicht der Speicheradressen auf und versuchen uns mit einem virtuellen Biss ins Genick nieder zu strecken

Grüße
rubberman
Bitte warten ..
Mitglied: Oreuss
04.08.2012 um 01:44 Uhr
der Fehler ist für mich ein Rätsel
ich habe wahrscheinlich noch nen Strukturfehler drin.


01.
 
02.
Option Explicit 
03.
' ********************************************************************************** 
04.
' ** Konstantendeklaration ********************************************************* 
05.
' ********************************************************************************** 
06.
Dim Von, Nach 
07.
Von = "Z:\CAD-Daten" 
08.
Nach = "Z:\Rüstdaten" 
09.
' ********************************************************************************** 
10.
' ** fehlermeldung wenn keine Argumente übergeben wurden *************************** 
11.
' ********************************************************************************** 
12.
Dim Args 
13.
'Args = Array("Z:\CAD-Daten\Test1\Testdatei1.Typ","Z:\CAD-Daten\Test2\Untertest2\Testdatei2.Typ") 
14.
Set Args = WScript.Arguments 
15.
If Args.Count = 0 Then 
16.
    MsgBox "Ohne Argumente wird's nichts!",0, WScript.ScriptName 
17.
    WScript.Quit 
18.
End If 
19.
' ********************************************************************************** 
20.
' ** Pfade und Dateiliste ermitteln                               ****************** 
21.
' ** Pfadliste mit dem geforderten Eingabeverzeichnis vergleichen ****************** 
22.
' ** Fehlermeldung bei falschem Ursprungspfad                     ****************** 
23.
' ********************************************************************************** 
24.
Dim LV, Quellpfad, Zielpfad, fso 
25.
Set fso = CreateObject("Scripting.FileSystemObject") 
26.
LV = Len(Von) 
27.
For Each Quellpfad In Args 
28.
    If LCase(Left(Quellpfad, LV)) <> LCase(Von) Then ' <> ungleich 
29.
        MsgBox "Diese Script kann nur aus einem Unterverzeichnis von """ & Von & """ gestartet werden!",0,WScript.ScriptName 
30.
        WScript.Quit 
31.
    End If 
32.
    If fso.FolderExists(Quellpfad) Then 
33.
        MsgBox """" & Quellpfad & """ ist ein Ordner - dieses Script kann aber nur zum Kopieren von Dateien verwendet werden!", 0, WScript.ScriptName 
34.
        WScript.Quit 
35.
    End If 
36.
    ' ****************************************************************************** 
37.
    ' ** Pfad modifizieren ********************************************************* 
38.
    ' ****************************************************************************** 
39.
    Zielpfad = Replace(Quellpfad, Von, Nach, 1, 1, vbTextCompare) 
40.
    'If fso.FolderExists(Zielpfad) Or fso.FileExists(Zielpfad) Then  
41.
    '    MsgBox """" & Zielpfad & """ existiert bereits!", 0, WScript.ScriptName 
42.
    '    WScript.Quit 
43.
    'End If 
44.
    ' ****************************************************************************** 
45.
    ' ** ifnotexist Pfade anlegen ************************************************** 
46.
    ' ****************************************************************************** 
47.
    Dim ZielPfadOrdner, ZielTeilPfad, i 
48.
    ZielPfadOrdner = Split(Zielpfad, "\") 
49.
    ZielTeilPfad = ZielPfadOrdner(0) 
50.
    For i = 1 To UBound(ZielPfadOrdner) - 1 
51.
        ZielTeilPfad = ZielTeilPfad & "\" & ZielPfadOrdner(i) 
52.
        If fso.FileExists(ZielTeilPfad) Then 
53.
            MsgBox "Ordner """ & ZielTeilPfad & """ kann nicht erstellt werden!", 0, WScript.ScriptName 
54.
            WScript.Quit 
55.
        End If 
56.
        If Not fso.FolderExists(ZielTeilPfad) Then fso.CreateFolder(ZielTeilPfad) 
57.
    Next 
58.
    ' ****************************************************************************** 
59.
    ' ** Wenn Datei vorhanden abfrage ob überschreiben ***************************** 
60.
    ' ****************************************************************************** 
61.
    Dim answer 
62.
    If fso.FileExists(Zielpfad) Then 
63.
    	Set shell = WScript.CreateObject("WScript.Shell") 
64.
    	answer = MsgBox ("Soll die folgende Datei überschrieben werden?" &VbCrLf& "Datei:"""& Quellpfad &"" ,vbYesNoCancel,WScript.ScriptName) 
65.
    	' ************************************************************************** 
66.
    	' ** Abbruch durch Benutzer ************************************************ 
67.
    	' ************************************************************************** 
68.
    	If answer = vbCancel Then 
69.
    		WScript.Quit 
70.
    	Else 
71.
    	' ************************************************************************** 
72.
    	' ** Auswahl vbYes Datei kopieren ****************************************** 
73.
    	' ************************************************************************** 
74.
		If answer = vbYes Then 
75.
			fso.CopyFile Quellpfad, Zielpfad, True 
76.
		Else 
77.
        ' ************************************************************************** 
78.
    	' ** Auswahl vbNo nichts tun *********************************************** 
79.
    	' ************************************************************************** 
80.
		If answer = vbNo Then 
81.
		Else 
82.
    End If 
83.
    ' ****************************************************************************** 
84.
    ' ** Wenn die Datei nun noch nicht existiert wird automatisch kopiert ********** 
85.
    ' ****************************************************************************** 
86.
    If Not fso.FileExists(Zielpfad) Then 
87.
		fso.CopyFile Quellpfad, Zielpfad	 
88.
    End If 
89.
Next 
90.
' ********************************************************************************** 
91.
' ** ausgabe mit log *************************************************************** 
92.
' ********************************************************************************** 
93.
MsgBox "Script erfolgreich beendet",vbOK 
94.
 
Bitte warten ..
Mitglied: bastla
04.08.2012, aktualisiert um 02:10 Uhr
Hallo Oreuss!
der Fehler ist für mich ein Rätsel
... und um es auch für uns spannender zu machen, nennst Du ihn gleich gar nicht ...
ich habe wahrscheinlich noch nen Strukturfehler drin.
Wenn es nach 3 "If" nur ein einziges "End If" gibt, kann man das wohl so nennen ...
Schöner ist eine Lösung mit "Select Case" - etwa:
01.
    Dim answer 
02.
    If fso.FileExists(Zielpfad) Then 
03.
    	answer = MsgBox ("Soll die folgende Datei überschrieben werden?" &VbCrLf& "Datei:"""& Quellpfad &"" ,vbYesNoCancel,WScript.ScriptName) 
04.
        Select Case answer 
05.
        Case vbCancel 
06.
            ' ************************************************************************** 
07.
            ' ** Abbruch durch Benutzer ************************************************ 
08.
            ' ************************************************************************** 
09.
            WScript.Quit 
10.
    	Case vbYes 
11.
            ' ************************************************************************** 
12.
            ' ** Auswahl vbYes Datei kopieren ****************************************** 
13.
            ' ************************************************************************** 
14.
            fso.CopyFile Quellpfad, Zielpfad, True 
15.
        Case Else 
16.
            ' ************************************************************************** 
17.
            ' ** Auswahl vbNo nichts tun *********************************************** 
18.
            ' ************************************************************************** 
19.
        End Select 
20.
    Else 'Zieldatei existiert noch nicht 
21.
        'Zielpfad erstellen 
22.
        'Datei kopieren 
23.
    End If
Außerdem würde ich (wie im "Else"-Zweig schon angedeutet) die Abfrage schon an der ursprünglichen Position (ab Zeile 40) platzieren, da dann der unnötige Versuch, den Zielpfad (den muss es ja schon geben) zu erstellen, unterbleiben kann ...

... und, nur zur Sicherheit, trotzdem vorweg feststellen, ob der Zielpfad schon durch einen vorhandenen Ordner "besetzt" ist ...

Grüße
bastla
Bitte warten ..
Mitglied: Oreuss
05.08.2012 um 21:14 Uhr
Der Zielpfad kann, muß aber nicht existieren.
Bitte warten ..
Mitglied: bastla
05.08.2012 um 23:44 Uhr
Hallo Oreuss!
Der Zielpfad kann, muß aber nicht existieren.
Glaube ich Dir auf's Wort ...

Grüße
bastla
Bitte warten ..
Mitglied: Oreuss
06.08.2012 um 00:27 Uhr
Das Thema ist für mich gelöst.

Ein paar Sachen habe ich modifiziert und werde ich modifizieren.

Ich bedanke mich für die Kritik, den Humor und die Schelte
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Outlook & Mail
Outlook 2010 Userprofile Foto anzeigen lassen (2)

Frage von staybb zum Thema Outlook & Mail ...

Virtualisierung
gelöst Interne Netzwerke untereinander kommunizieren lassen (9)

Frage von chelewae zum Thema Virtualisierung ...

VB for Applications
gelöst Mehrere Charts per VBA erstellen lassen, Titel wird nicht angezeigt

Frage von Aximand zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...