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

Zwei Ordner durchsuchen

Frage Entwicklung VB for Applications

Mitglied: lionne

lionne (Level 1) - Jetzt verbinden

12.10.2011 um 09:50 Uhr, 2591 Aufrufe, 18 Kommentare

wie kann ich mit vbs zwei Ordnern durchsuchen? Ich habe die Ordner "D:\test\" und "E:\Beispiele\", die ich per vbs durchsuchen möchte um zu prüfen, ob eine pdf Datei erhalten ist. Ich kann es für einen Ordner machen.

Für zwei habe als Idee noch ein Sub zu schreiben, aber das ist nicht schön.

Hat Jemand eine Idee, wie ich es in eine Routine für beide Ordner hin bekomme?

Danke im Voraus
Lionne
Mitglied: bastla
12.10.2011 um 10:41 Uhr
Hallo lionne!

Die Suche muss für jeden Ordner einzeln erfolgen - ob als "Sub" (oder "Function" - noch hast Du den Sinn der Aktion nicht beschrieben sorry, nicht genau genug gelesen ) oder als Schleife über ein "Array()" von Suchzielen bleibt letztlich Dir überlassen ...

Grüße
bastla
Bitte warten ..
Mitglied: colinardo
12.10.2011 um 10:50 Uhr
Hier eine Möglichkeit:
01.
set objFS = Wscript.CreateObject("Scripting.FileSystemObject") 
02.
set f1 = objFS.GetFolder("c:\temp\f1") 
03.
set f2 = objFS.GetFolder("c:\temp\f2") 
04.
suchObjekt = "NachdiesemPDFsucheich.pdf" 
05.
if parseFolder(f1) = true or parseFolder(f2) = true then 
06.
	wscript.Echo "Found" 
07.
else 
08.
	wscript.Echo "Not Found" 
09.
end if 
10.
 
11.
Function parseFolder(fldr) 
12.
	dim found 
13.
	For each file in fldr.Files 
14.
		if file.name = suchObjekt then 
15.
			parseFolder = true 
16.
			exit function 
17.
		end if	 
18.
	Next 
19.
	 
20.
	For Each subFolder in fldr.SubFolders 
21.
		if parseFolder(subFolder) = true then 
22.
			parseFolder = true 
23.
			exit function 
24.
		end if 
25.
	Next 
26.
	 
27.
End Function
Bitte warten ..
Mitglied: lionne
12.10.2011 um 16:02 Uhr
Hallo bastla,

danke für deine Antwort. Wenn ich das Skript ausführe, bekomme ich folgende Fehlermeldung:
"Object required 'fldr' ". Obwohl ich 'fldr' als als Dim declariert habe.

Danke
Lionne
Bitte warten ..
Mitglied: colinardo
12.10.2011 um 16:26 Uhr
'fldr' wird nur innerhalb der Function verwendet. Sie braucht nicht deklariert werden.
Wahrscheinlich hast du bei der Angabe der Ordner einen Fehler eingebaut. Wenn die GetFolder Methode fehlschlägt ist 'fldr' leer und die Function schlägt fehl.
Hoffe du hast das Script nicht nur einfach kopiert und ausgeführt. Du musst es natürlich an deine Gegebenheiten anpassen. Variable "F1" und "F2" sind die Ordner in denen du suchst und "suchObjekt" der Name der PDF Datei.
Bitte warten ..
Mitglied: lionne
12.10.2011 um 16:49 Uhr
Hallo Softmeister,

natürlich habe ich das Skript angepasst. Aber ich bekomme immer die Fehlermeldung: "Object required 'fldr" an der Stelle
01.
 For each file in fldr.Files 
Bitte warten ..
Mitglied: bastla
12.10.2011 um 16:54 Uhr
Hallo lionne!

Wäre es dann nicht sinnvoll, Deine aktuelle Version des Scripts zu posten?

Grüße
bastla
Bitte warten ..
Mitglied: colinardo
12.10.2011 um 17:12 Uhr
Das Script funktioniert so, da muss der Fehler in einer deiner Anpassungen stecken , bitte poste das ganze Script...
Bitte warten ..
Mitglied: lionne
12.10.2011 um 17:14 Uhr
Hallo bastla,

mein code

Gruß
Lionne

01.
    Dim targetType 
02.
 
03.
set objFS = Wscript.CreateObject("Scripting.FileSystemObject") 
04.
set f1 = objFS.GetFolder("E:\test1") 
05.
set f2 = objFS.GetFolder("D:\PdfFile") 
06.
 
07.
targetType = "pdf" 
08.
if parseFolder(f1) = true or parseFolder(f2) = true then 
09.
	wscript.Echo "Found" 
10.
else 
11.
	wscript.Echo "Not Found" 
12.
end if 
13.
 
14.
Sub parseFolder(fldr) 
15.
	dim found 
16.
	For each file in fldr.Files 
17.
		 
18.
		If LCase(fldr.GetExtensionName(file.Name)) = LCase(targetType) Then 
19.
			if file.DateCreated = currentDate then 
20.
				'parseFolder = true 
21.
				WScript.echo file.DateCreated 
22.
				'send a message 
23.
			End if 
24.
			 
25.
		End if	 
26.
	Next 
27.
	 
28.
	 
29.
End sub
Bitte warten ..
Mitglied: Biber
12.10.2011 um 22:26 Uhr
Na ja, lionne,

VBS-Schnipsel sind ja nicht gerade mein Fachgebiet, aber ganz so robust erscheint mir dein Entwurf ja nicht.

a) Als parseFolder -Function wie im ersten Entwurf von Softmeister liesse sich ja ein True/Fals-Returnwert auswerten.
Als Sub parseFolder wird das schwierig

b) Ein "fldr.GetExtensionName(file.Name))" geht in die Grütze, weil GetExtensionName() eine Methode des FileSystemObjects ist.
Aber keine des Folder-Objects.

c) ein Vergleich "file.DateCreated" mit "currentDate" (WTF??), aber auch mit "Date" geht daneben, weil file.DateCreated Datum und Zeit beinhaltet. Also quasi "tt.mm.jjjj hh:mm:ss" plus Kroppzeug.
"Date" dagegen nur "tt.mm.jjjj"

Also etwas robuster als Vorschlag:
01.
' F:\schnipsel\parsefolders.vbs 
02.
Dim objFS, f1, f2 
03.
 
04.
set objFS = Wscript.CreateObject("Scripting.FileSystemObject") 
05.
set f1 = objFS.GetFolder("D:\temp") 
06.
set f2 = objFS.GetFolder("f:\schnipsel") 
07.
 
08.
targetType = "vbs" 
09.
if (parseFolder(f1) or parseFolder(f2) ) then 
10.
	wscript.Echo "Found" 
11.
else 
12.
	wscript.Echo "Not Found" 
13.
end if 
14.
 
15.
Function  parseFolder(fldr) 
16.
	parsefolder = false 
17.
	For each file in fldr.Files 
18.
		If LCase(objFS.GetExtensionName(file.Name)) = LCase(targetType) Then 
19.
			if DateDiff("d",file.DateCreated, Date) = 0 then 
20.
				parseFolder = true 
21.
				WScript.echo fldr.name , ":" ,file.name , file.DateCreated 
22.
				'send a message 
23.
				Exit Function 
24.
			End if 
25.
			 
26.
		End if	 
27.
	Next 
28.
	 
29.
	 
30.
End Function
proof of concept
>f:\schnipsel\parsefolders.vbs 
schnipsel : parsefolders.vbs 12.10.2011 22:20:05 
Found
Grüße
Biber
Bitte warten ..
Mitglied: lionne
13.10.2011 um 12:13 Uhr
Hallo zusammen,

danke für die Zahlreiche Antwort. So habe ich jetzt das Programm gebastelt und es funktioniert.

Mein Ziel ist jetzt nur eine for-Schleife zu benutzen und die Ordner als Parameter zu übergeben.

Kann Jemand helfen?

Danke und Gruß
Lionne


01.
 
02.
Sub parseFolder() 
03.
 
04.
    Dim f1, f2, targetType, fso, filePdf, currentDate 
05.
 
06.
    Set fso     = CreateObject("Scripting.FileSystemObject") 
07.
    f1       = "D:\test1"  
08.
	f2      = "E:\Customer NOV\PdfFile" 
09.
     
10.
	targetType = "pdf" 
11.
 
12.
	 
13.
		currentDate = Date() 
14.
		 
15.
		'Ordner1 
16.
		For Each filePdf In fso.GetFolder(f1).Files 		  
17.
			If LCase(fso.GetExtensionName(filePdf.Name)) = LCase(targetType) Then 
18.
			 
19.
				If ( filePdf.DateCreated < currentDate ) Then					 
20.
					WScript.echo filePdf.Name & " " & filePdf.DateCreated 
21.
					listeErstellen 'subaufruf 
22.
				End If		 
23.
			End If 
24.
		Next 
25.
	    
26.
		 
27.
		'Ordner1 
28.
		For Each filePdf In fso.GetFolder(f2).Files  
29.
		  
30.
			If LCase(fso.GetExtensionName(filePdf.Name)) = LCase(targetType) Then 'Test Datei-Typ 
31.
				 
32.
				If ( filePdf.DateCreated < currentDate ) Then					 
33.
					WScript.echo filePdf.Name & " " & filePdf.DateCreated 
34.
					listeErstellen 'subaufruf 
35.
				End If 
36.
			End If 
37.
		Next 
38.
	 
39.
end Sub 
40.
 
Bitte warten ..
Mitglied: colinardo
13.10.2011 um 12:25 Uhr
Das hatte ich doch schon ganz zu Anfang mit der parseFolder "Function" demonstriert...
denke dein Problem sollte hiermit einen Abschluss finden:
01.
 
02.
    Dim f1, f2, targetType, fso, filePdf, currentDate 
03.
 
04.
    Set fso     = CreateObject("Scripting.FileSystemObject") 
05.
    f1       = "D:\test1"  
06.
	f2      = "E:\Customer NOV\PdfFile" 
07.
     
08.
	targetType = "pdf" 
09.
	currentDate = Date() 
10.
	sucheDateiInOrdner(f1) 
11.
	sucheDateiInOrdner(f2) 
12.
	 
13.
 
14.
 
15.
Function sucheDateiInOrdner(ordner) 
16.
	For Each filePdf In fso.GetFolder(ordner).Files 		  
17.
			If LCase(fso.GetExtensionName(filePdf.Name)) = LCase(targetType) Then 
18.
			 
19.
				If ( filePdf.DateCreated < currentDate ) Then					 
20.
					WScript.echo filePdf.Name & " " & filePdf.DateCreated 
21.
					listeErstellen 'subaufruf 
22.
				End If		 
23.
			End If 
24.
		Next 
25.
End Function
Bitte warten ..
Mitglied: lionne
13.10.2011 um 13:15 Uhr
Danke es funktioniert sehr gut.

Aber sobald, ich die Funktion in ein Programm einfüge, wo es 5 andere Sub gibt, bekomme ich die Fehlermeldung: "object required 'fso'".

Woran kann es liegen?

Danke
Lionne
Bitte warten ..
Mitglied: colinardo
13.10.2011 um 13:26 Uhr
Der obere Teil bis einschl. sucheDateiInOrdner gehört nicht in ein Sub sondern direkt in die VBS-Datei. Die Meldung kommt deswegen weil set fso=... global deklariert werden muss sonst findet die Funktion das Objekt fso nicht. Du kannst das Objekt fso aber auch nur in der Funktion deklarieren wenn du es nur dort benötigst, dann kommt der Fehler nicht.
Ein wenig Grundlagen VBS Lektüre wäre angesagt ...
Bitte warten ..
Mitglied: lionne
13.10.2011 um 13:46 Uhr
Zitat von colinardo:

Ein wenig Grundlagen VBS Lektüre wäre angesagt ...

Hallo Softmeister,

du hast recht. Ich suche immer noch ein gutes Buch, mit kleine Aufgaben und viele Beispiele. Wenn du eins kennst, gibt mir bitte den Name.

Ich habe vorher viel mit SQL gemacht, und jetzt bekomme ich immer mehr Programmierung Aufgaben.

Danke nochmal für deine Zahlreiche Antwort

Gruß
Lionne
Bitte warten ..
Mitglied: colinardo
13.10.2011 um 13:54 Uhr
Auf die schnelle ist das eine gute Übersicht der Sprachelemente mit Beispielen : http://www.asphelper.de/aspkurs/A300102.asp
Und hier eine Referenz: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id ...
Bitte warten ..
Mitglied: lionne
13.10.2011 um 15:32 Uhr
Hallo Softmeister,

Danke ich werde die Seite speichern.

noch eine Frage:
Wenn es im Ordner 16 Pdf Dateien gibt, die die Bedingung if ( (datevalue(left( filePdf.DateCreated , 10)) < currentDate) erfüllen(siehe Zeile 19), dann bekomme ich von Sub „listErstellen“(siehe Zeile 21) soviel Meldungen wie die Anzahl der pdf Dateien.

Wie kann ich Steuern, dass diese nur einmal gesendet wird?

Gruß
Lionne
Bitte warten ..
Mitglied: colinardo
13.10.2011 um 15:44 Uhr
Du musst schon wissen bei welchem PDF du eine Sub-Prozedur aufrufen willst. Wenn du bei der ersten gefundenen Datei reagieren willst und die anderen ignorierst kannst du die FOR-Schleife mit Exit For oder Exit Function hinter "listErstellen" verlassen.
Bitte warten ..
Mitglied: lionne
13.10.2011 um 16:35 Uhr
Vielen Dank, es funktioniert.

Gruß
Lionne
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (10)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...