lordiliner
Goto Top

VBScript zum automatischen Verschieben von .pdf-Dateien

Hallo zusammen,
ich bin neu hier im Forum und hätte eine Frage zum Thema VBS. Für meine Arbeit muss ich ein Script erstellen, bin allerdings absolut unwissend in diesem Bereich. Folgende Aufgabenstellung ist zu lösen:

Aus drei verschiedenen Ordnern (C:\NeuerOrdner1 , C:\NeuerOrdner2 , C:\ NeuerOrdner3) sollen alle .pdf-Dateien in drei andere Ordner (C:\Test\Ordner1 , C:\Test\Ordner2 , C:\Test\Ordner3) verschoben werden und zwar so, dass der Inhalt aus C:\NeuerOrdner1 in C:\Test\Ordner1 landet.
Das Skript soll das alle zehn Sekunden machen, aber nur pdf.-Dateien, die älter als fünf Sekunden sind und das Ganze noch in Dauerschleife, ohne Fehlermeldung.

Ich habe mir selber ein paar Sachen aus den Code-Schnipseln eines Arbeitskollegen zusammengebastelt, allerdings ohne genauen Plan.

Hier ist der momentane Code:

Option Explicit

On Error Resume Next

Dim fso, net, path, oFolder, oSubFolder, folder, files, lgf, file, filn, fs, i, loesch

i = 0
Const src = "C:\NeuerOrdner1"  
Const targetpdf = "C:\Test\NeuerOrdner1\"  

Set fso = WScript.CreateObject("Scripting.FileSystemObject")  
Set net = WScript.CreateObject("Wscript.Network")  

For i = 1 To 2
	WScript.Sleep(10000)
	copy src, targetpdf
	i = i - 1
Next	


Sub copy (src, target)
	Set folder = fso.GetFolder(src)
	Set files = Folder.Files
	For Each file In files
		filn = file
		If Datediff("s", file.DateCreated, now) > 5 Then  
		Set fs = fso.GetFile (filn)
			If fso.FolderExists (target) Then 
				fs.copy target
				set loesch = createobject("scripting.filesystemobject")  
				loesch.deletefile src + "\*.pdf", True  
				
			Else	
			End If 
		End If 
	Next
End Sub

Hierbei werden allerdings alle Dateien verschoben und auch nur aus einem Ordner.

Über einsteigerfreundliche Tips und Tricks würde ich mich sehr freuen.

Grüße
lordiliner

Content-Key: 197835

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

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

Member: mayho33
mayho33 Jan 29, 2013 updated at 21:24:09 (UTC)
Goto Top
Hi!

Eigentlich wollte ich mich mit einer Erklärung wie du das Problem lösen kannst begnügen, da ich mich aber noch an meine Anfänge erinnern kann und froh war mal was Funktionierendes studieren zu können, bekommst du doch etwas mehr als nur gutgemeinte Tipps.

Gleich mal als allererstes die Hilfe zu VBS als Download >> http://wintuc.com/wsh-vbs/scr56de.chm/script56.chm
DA werden alle Funktionen, Methoden Schlüsselwörter, Operatoren usw erklärt. Auch findest du sehr gute Beispiele, kurz und knackig erklärt ohne umständliches Gedöhns rundherum das nur verwirrt anstatt den Knoten zu lösen.

Ansonsten hilfts auch mal einen Teil des Codes in Google einzugeben.
Vervielfältigen musst du aber wirklich selbst.

Viel Spaß damit!

Mayho


'CODE =====================================================================================
Dim objFso: Set objFso = WScript.CreateObject("scripting.filesystemobject")
Dim Folder1: Folder1 = "C:\TEST1\"
Dim Folder2: Folder2 = "C:\TEST2\"

'Object des gewünschten Folders erstellen
Set F1 = objFso.GetFolder(Folder1)

'Do-Schleife wiederholt sich bis zur Abbruchbedingung
'Achtung!! Keine Abbruchbedingung = Kein Ende deines Scripts.
'Im schlimmsten Fall hast du einen Speicherüberlauf und die Mühle friert ein.
'Ungespeicherte Arbeiten gehen verloren, denn da hilft nur ein Hardreset
Do
'Eine For-Schleife durchläuft immer wieder den Ordner.
'das ".Files" hinten besagt, dass Files im Ordner gelesen werden sollen
'das gibt es auf für ".subfolders" und noch einiges anderes
For Each item In F1.Files
'Right kannst du ja gleich mal in der Hilfe nachschauen
If Right(item.Name, 3) = "pdf" Then
'Copy oder doch Move?
'objFso.CopyFile item.Path, Folder2, True
objFso.MoveFile item.Path, Folder2
End If
Next
'Ganze 10 Minuten waren....
'Hier werden Tausenstel gezählt
WScript.Sleep 60000
Loop
Member: lordiliner
lordiliner Feb 04, 2013 at 07:30:29 (UTC)
Goto Top
Guten Morgen.

Vielen Dank für deine schnelle Hilfe, Mayho. So einen Link habe ich schon ewig gesucht, aber nicht gefunden.
Nach etwas längerem studieren deines Codes, konnte ich mir alle Bestandteile erschließen und es hat mich ein gutes Stück weiter gebracht.
Also nochmals Vielen Dank für den Download-Link und den funktionierenden Code.

Hier der von mir vollendete Code zur Aufgabenstellung:

Option Explicit


Dim objFso: Set objFso = WScript.CreateObject("scripting.filesystemobject")  
 Dim Folder11: Folder11 = "C:\test1\"  
 Dim Folder21: Folder21 = "C:\test\test1\"  
 Dim Folder12: Folder12 = "C:\test2\"  
 Dim Folder22: Folder22 = "C:\test\test2\"  
 Dim Folder13: Folder13 = "C:\test3\"  
 Dim Folder23: Folder23 = "C:\test\test3\"  
 Dim F1, F2, F3, item1, item2, item3
 
 'Object des gewünschten Folders erstellen  
Set F1 = objFso.GetFolder(Folder11)
Set F2 = objFso.GetFolder(Folder12)
Set F3 = objFso.GetFolder(Folder13)

'Do-Schleife wiederholt sich bis zur Abbruchbedingung  
Do
 'Eine For-Schleife durchläuft immer wieder den Ordner.  
 For Each item1 In F1.Files
	If Right(item1.Name, 3) = "pdf" Then   
	objFso.CopyFile item1.Path, Folder21, True
	objFso.DeleteFile (Folder11 + "*.pdf"), True  
	End If
 Next
 For Each item2 In F2.Files
	If Right(item2.Name, 3) = "pdf" Then  
	objFso.CopyFile item2.Path, Folder22, True
	objFso.DeleteFile (Folder12 + "*.pdf"), True  
	End If
 Next
	For Each item3 In F3.Files
	If Right(item3.Name, 3) = "pdf" Then  
	objFso.CopyFile item3.Path, Folder23, True
	objFso.DeleteFile (Folder13 + "*.pdf"), True  
	End If
 Next
 'Ganze 10 Sekunden warten  
	WScript.Sleep 10000
 Loop


Grüße

lordiliner