robbe83
Goto Top

Auswahl und Kopierscript erstellen mit WSH

Vorab:

Ja ich weiß das es eine sehr einfache Frage ist und es sicherlich 1000'de Anleitungen im Internet gibt aber ich frage trotzdem.

Also bitte erspart mir irgendwelche "doofen" Kommentare - ich steh grade aufm Schlauch was eine Lösung angeht und erhoffe mir auf diese Art und Weise dem Problem Herr zu werden.

Ich möchte mir ein ganz einfaches Script erstellen was folgendes macht:

1. soll eine Abfrage stattfinden (msgbox) wo ich einen von drei Namen eingeben muss

2. je nachdem welcher von den drei namen eingegeben wurde sollen entsprechende Dateien kopiert werden

3. wird keiner der drei namen eingegeben soll die Abfrage erneut starten

4. die Abfrage soll so lange neu starten bis 3 mal entweder kein Name und keiner der drei vorgegebenen Namen eingegeben wurde


Ich hab das ganze schon mit IF/Then/Else versucht - was auch teilweise klappt.
Allerdings kopiert er entweder gar nix oder er kopiert alle Dateien von allein drei Namen.

Mfg

Robert

Content-Key: 204087

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

Printed on: April 25, 2024 at 14:04 o'clock

Member: SlainteMhath
SlainteMhath Mar 28, 2013 at 10:46:27 (UTC)
Goto Top
Moin,

wie wär's denn wenn du den Code den du bisher erarbeitet hast einfach mal postest? Es wird dir hier sicher keiner (umsonst face-smile ) ein fertiges Script reinstellen.

lg,
Slainte
Member: Robbe83
Robbe83 Mar 28, 2013 updated at 11:20:53 (UTC)
Goto Top
Ok, das dass keiner umsonst macht ist mir klar face-smile.

Hier ist der Code von einem meiner Versuche (kopieren tut es so nix).


Dim wsh : Set wsh = CreateObject("WScript.Shell")  
Dim objFSO
	Set objFSO = CreateObject("Scripting.FileSystemObject")  
Dim b1
b1 = "name1, name2, name3"  

Eingabefenster = InputBox("Bitte Namen eingeben")  

If b1 = "name1" Then  
	objFSO.copyfile "\\xxx\xxx\xxx\v1\111.txt", "d:\1.txt"  
	objFSO.copyfile "\\xxx\xxx\xxx\v1\112.txt", "d:\2.txt"  
	objFSO.copyfile "\\xxx\xxx\xxx\v1\113.txt", "d:\3.txt"  
ElseIf b1 = "name2" Then  
	objFSO.copyfile "\\xxx\xxx\xxx\v2\211.txt", "d:\4.txt"  
	objFSO.copyfile "\\xxx\xxx\xxx\v2\212.txt", "d:\5.txt"  
	objFSO.copyfile "\\xxx\xxx\xxx\v2\213.txt", "d:\6.txt"  
ElseIf b1 = "name3" Then  
	objFSO.copyfile "\\xxx\xxx\xxx\v3\311.txt", "d:\7.txt"  
	objFSO.copyfile "\\xxx\xxx\xxx\v3\312.txt", "d:\8.txt"  
	objFSO.copyfile "\\xxx\xxx\xxx\v3\313.txt", "d:\9.txt"  
Else
InputBox("Bitte Namen eingeben")  
End If

Irgendwie fehlt es mir am grundlegenden Verständis für diese Anweisungen... und so richtig schlau werd ich aus Fachbüchern auch nicht was das angeht.

Mfg

Robert
Member: SlainteMhath
SlainteMhath Mar 28, 2013 at 11:05:01 (UTC)
Goto Top
Die Variable b1 brauchst Du nicht. Ersetze "b1" in den If/ElseIf Statments durch "Eingabefenster", dann sollte das Kopieren funktionieren.
Member: bastla
bastla Mar 28, 2013 at 11:15:58 (UTC)
Goto Top
... und verwende "Dim" zusammen mit "Option Explicit" und daher für alle Variablen oder gleich gar nicht ...

Für das Posten von Code gibt es hier übrigens eine passende Formatierung (lässt sich auch nachträglich hinzufügen).

Grüße
bastla
Member: Robbe83
Robbe83 Mar 28, 2013 updated at 11:23:40 (UTC)
Goto Top
Ok das war ja mal mehr als einfach. Funktioniert super.

Was aber noch gut wäre das wenn ich einen falschen Namen eingebe das er mir zum einen einen Fehler anzeigt und zum anderen dann aber das script nicht beendet sondern mir noch zwei Versuche durch ein Eingabefenster gibt den richtigen Namen einzugeben.

Über

Else
MsgBox "Falscher Name"  

gibt er mir zwar den Fehler aus aber dann beendet er das Script.

Mfg

Robert
Member: SlainteMhath
SlainteMhath Mar 28, 2013 updated at 11:28:17 (UTC)
Goto Top
Das geht mit einer Do/loop Schleife, etwa so:
dim i
i=0
do 
  If Eingebefenster = ....
    ...
    exit do
  elseif  ...
    ...
    exit do
  elseif  ...
    ...
    exit do
  Else
    i=i+1
    if i=3 then 
        msgbox "Zuviele Fehler!"  
        exit do
    end if
  End If
loop
Member: bastla
bastla Mar 28, 2013 at 11:40:57 (UTC)
Goto Top
... oder auch so:
Versuche = 3
Do
    Eingabefenster = InputBox("Bitte Namen eingeben")  
    Select Case LCase(Eingabefenster)
        Case "name1"  
            objFSO.copyfile "\\xxx\xxx\xxx\v1\111.txt", "d:\1.txt"  
            objFSO.copyfile "\\xxx\xxx\xxx\v1\112.txt", "d:\2.txt"  
            objFSO.copyfile "\\xxx\xxx\xxx\v1\113.txt", "d:\3.txt"  
            Versuche = -1
        Case "name2"  
            ...
        Case "name3"  
            ...
        Case Else
            Versuche = Versuche - 1
    End Select
Loop Until Versuche <= 0
If Versuche = 0 Then MsgBox "Zu viele Fehler!"  
Grüße
bastla
Member: Robbe83
Robbe83 Mar 28, 2013 at 12:08:09 (UTC)
Goto Top
Erstmal Vielen Dank an euch Beide - die Varianten funktionieren super.

Eine Frage hätte ich aber noch.

Ist es grundsätzlich egal ob man das in der Schleife durch If/Then Anweisungen oder durch Case Anweisungen erledigt?

Oder gibt es da bei der einen oder anderen Variante Einschränkungen?

Mfg

Robert

PS: Ich merke schon, ich hab noch verdammt viel übers Scripten/Programmieren zu lernen ;D
Member: SlainteMhath
SlainteMhath Mar 28, 2013 at 12:18:43 (UTC)
Goto Top
Ist es grundsätzlich egal ob man das in der Schleife durch If/Then Anweisungen oder durch Case Anweisungen erledigt?

Vom Programmablauf her ist es egal. Schöner finde ich aber eigentl. auch Select...case Konstrukte