lordiliner
Goto Top

VBScript - Sub-Funktion einfügen

Guten Morgen zusammen,
für ein VBScript soll ich eine Unterfunktion einbauen. Leider bin ich auf diesem Gebiet absolut unwissend und brauche eure Hilfe. Hier die Aufgabenstellung:

Das Script kopiert .txt-Dateien von verschiedenen Ordnern in andere Ordner. Jetzt sollen die verschiedenen Pfade in einer Unterfunktion angegeben werden, damit diese automatisch angezogen werden.
Momentan habe ich diesen Code:

Option Explicit

Dim objFso: Set objFso = WScript.CreateObject("scripting.filesystemobject")  
Const Folder11 = "C:\test\start\ordner1\"  
Const Folder21 = "C:\test\ende\ordner1\"  
Const Folder12 = "C:\test\start\ordner2\"  
Const Folder22 = "C:\test\ende\ordner2\"  
Const Folder13 = "C:\test\start\ordner3\"  
Const Folder23 = "C:\test\ende\ordner3\"  
Dim F1, F2, F3, item1, item2, item3
 
Set F1 = objFso.GetFolder(Folder11)
Set F2 = objFso.GetFolder(Folder12)
Set F3 = objFso.GetFolder(Folder13)

Do
 For Each item1 In F1.Files
	If Right(item1.Name, 3) = "txt" Then   
	objFso.CopyFile item1.Path, Folder21, True
	End If
 Next
 For Each item2 In F2.Files
	If Right(item2.Name, 3) = "txt" Then  
	objFso.CopyFile item2.Path, Folder22, True
	End If
 Next
	For Each item3 In F3.Files
	If Right(item3.Name, 3) = "txt" Then  
	objFso.CopyFile item3.Path, Folder23, True
	End If
Loop

Also in der Do-Schleife soll nicht drei Mal eine If-Funktion sein, sondern eine Unterfunktion, die eben die Pfade angibt.

Über einsteigerfreundliche Tipps und Anregungen würde ich mich sehr freuen.

Liebe Grüße

lordiliner

Content-Key: 201321

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

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

Mitglied: 106543
106543 Feb 06, 2013 at 07:39:49 (UTC)
Goto Top
Hi,

geschätzte 3 Sec. Suche in Google.de:
http://www.instructables.com/id/VBS-Tutorial-Basics/

Grüße
Exzellius
Member: lordiliner
lordiliner Feb 06, 2013 at 08:06:33 (UTC)
Goto Top
Hallo Exzellius.

Vielen Dank für den Link. Hab mir mal schnell alles durchgelesen und hab jetzt ein paar Fragen dazu:

Zum Thema Subs steht auf der Seite, dass die so aussehen:
Sub iRule(arg1,arg2,arg3)
...Script...
End Sub
Muss ich dann als Argumente die sechs verschiedenen Pfade angeben?
Bei ...Script... muss ich die Zeile mit dem .CopyFile einfügen?
Wie erstelle ich eigentlich ein Argument? Genauso wie eine Variable?

Entschuldigt bitte meine Unwissenheit, aber VBS ist einfach absolutes Neuland für mich.

Liebe Grüße

lordiliner
Mitglied: 106543
106543 Feb 06, 2013 at 08:29:11 (UTC)
Goto Top
Hi du face-smile

kein Problem dafür gibts ja Foren
zunächst einmal um auf deine Fragen einzugehen:
bei den Argumenten muss dein Pfad rein ja face-smile
dann müsste ein Aufruf für die Sub ca. so aussehen ->
call iRule(Pfad1,Pad2,Pfad3,...)
bei ...Script... muss halt der Inhalt rein, der zusammengefasst werden soll also praktisch dein Copy-Befehl rein face-smile

ein Argument ist einfach nur eine Variable die an eine Sub oder Funktion übergeben wird, also brauchst du keine neuen Variablen definieren

Grüße
Exzellius
Member: bastla
bastla Feb 06, 2013, updated at Feb 07, 2013 at 08:52:21 (UTC)
Goto Top
Hallo lordiliner!

Wenn es nur je 3 Quell-/Ziel-Ordnerpaare sind, würde ich das eher so anlegen (ungetestet):
Option Explicit

Dim objFso: Set objFso = WScript.CreateObject("scripting.filesystemobject")  
Dim Quelle, Ziel
Quelle = Array("C:\test\start\ordner1\", "C:\test\start\ordner2\", "C:\test\start\ordner3\")  
Ziel   = Array("C:\test\ende\ordner1\" , "C:\test\ende\ordner2\" , "C:\test\ende\ordner3\" )  

Dim i, File
For i = 0 To UBound(Quelle)
    For Each File In objFso.GetFolder(Quelle(i)).Files
        If LCase(objFso.GetExtensionName(File.Name)) = "txt" Then objFso.CopyFile File.Path, Ziel(i), True  
    Next
Next
Bei einer größeren Anzahl von Ordnern wäre dann eine Steuerdatei mit jeweils Quelle und Ziel in einer Zeile meine erste Wahl.

Grüße
bastla
Member: lordiliner
lordiliner Feb 07, 2013 at 08:13:20 (UTC)
Goto Top
Guten Morgen Exzellius und bastla,

dank eurer Hilfe bin ich nach allerhand Tests, Proben und Bastelarbeit zu einer Lösung gekommen.

Dafür danke ich euch beiden recht herzlich.

Viele Grüße

lordiliner
Member: bastla
bastla Feb 07, 2013 at 08:54:04 (UTC)
Goto Top
Hallo lordiliner!

Glückwunsch face-smile - als krönenden Abschluss könntest Du Dein funktionierendes Script noch posten ...

Grüße
bastla
Mitglied: 106543
106543 Feb 07, 2013 at 08:56:39 (UTC)
Goto Top
Hi,

Glückwunsch !
war wohl eher zum größten Teil @bastla Werk face-smile

Grüße
Exzellius
Member: lordiliner
lordiliner Feb 07, 2013 at 09:42:39 (UTC)
Goto Top
Hey,

also im Großen und Ganzen ist es eigentlich genau das, wass bastla hier gepostet hat.
Aber dank Exzellius hab ich nach stundenlanger Handwerkerei gestern festgestellt, dass Sub-Prozeduren momentan für mich noch zu kompliziert sind, als dass ich es hinbekommen würde. Aber das kommt noch. Ich bin da ja sehr lernwillig.

Also hier das fertige Script:

Option Explicit 

Dim objFso: Set objFso = WScript.CreateObject("scripting.filesystemobject")   
Dim Quelle, Ziel 
Quelle = Array("C:\test\start\ordner1\", "C:\test\start\ordner2\", "C:\test\start\ordner3\")  
Ziel   = Array("C:\test\ende\ordner1\", "C:\test\ende\ordner2\", "C:\test\ende\ordner3\")  

Dim i, File 
Do
For i = 0 To UBound(Quelle) 
    For Each File In objFso.GetFolder(Quelle(i)).Files 
        If LCase(objFso.GetExtensionName(File.Name)) = "txt" Then objFso.CopyFile File.Path, Ziel(i), True   
    Next 
	wscript.sleep 10000
Next
Loop

Gruß

lordiliner