Argumente über ziehen und fallen lassen übergeben und strings modifizieren
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
' 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]
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
' ***********************************
' ** Konstantendeklaration
' ** Ursprungs und Zielpfad
' ***********************************
Dim ccvon, ccnach
ccvon = "Z:\CAD-Daten"
ccnach = "Z:\Rüstdaten"
' ***********************************
' ** fehlermeldung wenn keine Argumente übergeben wurden
' ***********************************
Dim iArgs
Set iArgs = WScript.Arguments
If iArgs.Count = 0 Then
MsgBox "Ohne Argumente wird's nichts!",0,WScript.ScriptName
WScript.Quit
End If
' ***********************************
' ** Pfade und Dateiliste ermitteln
' ** Pfadliste mit dem geforderten Eingabeverzeichnis vergleichen
' ** Fehlermeldung bei falschem Ursprungspfad
' ***********************************
Dim iipath, iifilename, vvvergl
For i = 0 to iArgs.Count - 1
iipath(i) = GetPath_From_FilePath(iiquelle(i))
iifilename(i) = GetFileName_From_FilePath(iiquelle(i))
vvvergl = InStr(1, iipath(i), ccvon, 1)
if vvvergl = 0 then
MsgBox "Diese Script kann nur aus einem Unterverzeichnis von " & ccvon & " gestartet werden!",0,WScript.ScriptName
WScript.Quit
End If
Next
' ***********************************
' ** Pfadliste modifizieren
' ***********************************
Dim ooziel
For i = 0 to iiquelle.Count - 1 ' ** alle Argumente holen
'vvvtemp(i) = Text & vvvquelle.item(i)
Replace "ooziel(i)" , "ccvon", "ccnach"
Next
' ***********************************
' ** if notexist pfade anlegen
' ***********************************
For i = 0 to ooziel.Count - 1
if not fso.FolderExists( ooziel(i) ) then fso.CreateFolder( ooziel(i) )
Next
' ***********************************
' ** dateien kopieren
' ***********************************
For i = 0 to ooziel.Count - 1
fso.CopyFile "", "" ',Overwrite True
Next
' ***********************************
' ** ausgabe mit log
' ***********************************
MsgBox "Script erfolgreich beendet"
' habe aber keinen blassen Schimmer wie das zu bewerkstelligen ist.
WScript.Quit 'reicht für's erste
[Edit Biber] Codeformatierung. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 188977
Url: https://administrator.de/forum/argumente-ueber-ziehen-und-fallen-lassen-uebergeben-und-strings-modifizieren-188977.html
Ausgedruckt am: 15.04.2025 um 15:04 Uhr
20 Kommentare
Neuester Kommentar
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
Ich denke man müsste das einmal komplett neu schreiben
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
Fragen über Fragen ...
Grüße
rubberman
@rubberman
Grundsätzliches ACK - geschätzt sollte das wohl etwa Folgendes werden:
Grüße
bastla
P.S.: Wo es wohl Variablennamen der Art "ccvon" oder "iipath" zu kaufen gibt?
Grundsätzliches ACK - geschätzt sollte das wohl etwa Folgendes werden:
Von = "Z:\CAD-Daten"
Nach = "Z:\Rüstdaten"
' *
' fehlermeldung wenn keine Argumente übergeben wurden
' *
Set Args = WScript.Arguments
If Args.Count = 0 Then
MsgBox "Ohne Argumente wird's nichts!", 0, WScript.ScriptName
WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")
' *
' Pfade und Dateiliste ermitteln
' Pfadliste mit dem geforderten Eingabeverzeichnis vergleichen
' Fehlermeldung bei falschem Ursprungspfad
' *
LV = Len(Von)
For Each Quellpfad In Args
If LCase(Left(Quellpfad, LV)) <> LCase(Von) Then
MsgBox "Dieses Script kann nur aus einem Unterverzeichnis von """ & Von & """ gestartet werden!", 0 ,WScript.ScriptName
WScript.Quit
End If
If fso.FolderExists(Quellpfad) Then
MsgBox """" & Quellpfad & """ ist ein Ordner - dieses Script kann aber nur zum Kopieren von Dateien verwendet werden!", 0, WScript.ScriptName
WScript.Quit
End If
' *
' Pfad modifizieren
' *
Zielpfad = Replace(Quellpfad, Von, Nach, 1, 1, vbTextCompare)
If fso.FolderExists(Zielpfad) Or fso.FileExists(Zielpfad) Then
MsgBox """" & Zielpfad & """ existiert bereits!", 0, WScript.ScriptName
WScript.Quit
End If
' *
' if notexist pfade anlegen
' *
ZielPfadOrdner = Split(Zielpfad, "\")
ZielTeilPfad = ZielPfadOrdner(0)
For i = 1 To UBound(ZielPfadOrdner) - 1
ZielTeilPfad = ZielTeilPfad & "\" & ZielPfadOrdner(i)
If fso.FileExists(ZielTeilPfad) Then
MsgBox "Ordner """ & ZielTeilPfad & """ kann nicht erstellt werden!", 0, WScript.ScriptName
WScript.Quit
End If
If Not fso.FolderExists(ZielTeilPfad) Then fso.CreateFolder(ZielTeilPfad)
Next
' *
' Datei kopieren
' *
fso.CopyFile Quellpfad, ZielPfad ',Overwrite True
Next
' *
' ausgabe mit log
' ***
MsgBox "Script erfolgreich beendet"
bastla
P.S.: Wo es wohl Variablennamen der Art "ccvon" oder "iipath" zu kaufen gibt?
[OT]
Moin bastla,
Gab es in meiner Jugend auch schon - ich erinnere mich an bbking, jjcale und zztop.
Grüße
Biber
[/OT]
Moin bastla,
Gab es in meiner Jugend auch schon - ich erinnere mich an bbking, jjcale und zztop.
Grüße
Biber
[/OT]
[OT ii]

[/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. [OT2]
Hallo Biber!
P.S.: Und danke, dass Du gganderson nicht erwähnt hast ...
[/OT2]
[/OT ii]
Hallo Oreuss!
Zum Thema Variablen: Deklariert hast Du auch brav - allerdings würde ich dann noch dringend zu "
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
schreiben ...
[Edit] "x" nachgereicht [/Edit]
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
[Edit] "x" nachgereicht [/Edit]

[OT]
@bastla

Gruß Dieter
[/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 garnichtGruß Dieter
[/OT]
Hallo Oreuss!
oder einfach mit einem Batch das Script starten und die Argumente mit in die Befehlszeile schreiben:
Grüße
bastla
Ist es möglich die Argumente zu testzwescken manuell zu deklarieren.
Das kannst Du zB so machen:Von = "Z:\CAD-Daten"
Nach = "Z:\Rüstdaten"
' *
' fehlermeldung wenn keine Argumente übergeben wurden
' *
'Set Args = WScript.Arguments
'If Args.Count = 0 Then
' MsgBox "Ohne Argumente wird's nichts!", 0, WScript.ScriptName
' WScript.Quit
'End If
Set Args = Array("Z:\CAD-Daten\2222\test.txt", "Z:\CAD-Daten\1111\2222\test.pdf")
"%appdata%\Microsoft\Windows\SendTo\Kopieren.vbs" "Z:\CAD-Daten\2222\test.txt" "Z:\CAD-Daten\1111\2222\test.pdf"
bastla
[OT2] @Dieter

Danke, korrigiere ich der Ordnung halber oben.
Grüße
bastla
[/OT2]
Diese Option kannte ich noch garnicht
Ich war auch überrascht ... Danke, korrigiere ich der Ordnung halber oben.
Grüße
bastla
[/OT2]
Zitat von @Oreuss:
Aber wie ist das überhaupt mit dem Aufruf von Quellpfad in Zeile 19?
Nirgends deklariert, einfach aufgerufen und tut.
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 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
Hallo Oreuss!


Schöner ist eine Lösung mit "
Außerdem würde ich (wie im "
... und, nur zur Sicherheit, trotzdem vorweg feststellen, ob der Zielpfad schon durch einen vorhandenen Ordner "besetzt" ist ...
Grüße
bastla
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: Dim answer
If fso.FileExists(Zielpfad) Then
answer = MsgBox ("Soll die folgende Datei überschrieben werden?" &VbCrLf& "Datei:"""& Quellpfad &"" ,vbYesNoCancel,WScript.ScriptName)
Select Case answer
Case vbCancel
' **************************************************************************
' ** Abbruch durch Benutzer ************************************************
' **************************************************************************
WScript.Quit
Case vbYes
' **************************************************************************
' ** Auswahl vbYes Datei kopieren ******************************************
' **************************************************************************
fso.CopyFile Quellpfad, Zielpfad, True
Case Else
' **************************************************************************
' ** Auswahl vbNo nichts tun ***********************************************
' **************************************************************************
End Select
Else 'Zieldatei existiert noch nicht
'Zielpfad erstellen
'Datei kopieren
End If
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