Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: lionne

lionne (Level 1) - Jetzt verbinden

12.10.2011 um 09:50 Uhr, 2685 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 ..
Ähnliche Inhalte
Router & Routing
Zwei Switches, zwei VLANs
gelöst Frage von SonneLachtRouter & Routing13 Kommentare

Hallo, ich habe hier eine verzwickte Situation. Ich habe zwei WAN-Anbindungen, jeweils Erstweg und Zweitweg, macht also vier WAN-Router. ...

Router & Routing
Ein Haus, zwei Router, zwei Anbieter
gelöst Frage von 112TimoRouter & Routing11 Kommentare

Hallo Leute, folgendes Problem: meine Eltern sind Kunden bei Kabel Deutschland und ich möchte jetzt zu 1&1 wechseln. Wir ...

Router & Routing

Zwei DSL Leitungen, Zwei Fritzboxen, Zwei Dyndns Accounts - Portweiterleitung klappt nicht

gelöst Frage von caravandriverRouter & Routing4 Kommentare

Hallo, ich habe zwei DSL Leitungen. Eine 100 Mbit (vodafone)und eine 50 Mbit (telekom). An jeder Leitung hängt eine ...

LAN, WAN, Wireless

Zwei Netzwerke Zwei Internetzugänge ein Rechner

gelöst Frage von Oggy01LAN, WAN, Wireless5 Kommentare

Hallo, wie kann man den Internetzugang festlegen, der bei zwei unterschiedlichen Netzwerken auf einem Rechner genutzt werden soll? Intel ...

Neue Wissensbeiträge
Windows Server

Zähe Update-Installation auf Windows Server 2016

Information von kgborn vor 2 TagenWindows Server4 Kommentare

Mir sind in der Vergangenheit immer wieder Beschwerden von Admins unter die Augen gekommen, die sich über die doch ...

Humor (lol)
Turnschuhe per Firmware lahmlegen
Information von Henere vor 2 TagenHumor (lol)8 Kommentare

Und was kommt demnächst ? Bekomme ich kein Klopapier mehr, weil der Spender einem DDOS unterliegt ? :-) Ich ...

Sicherheit

Sicherheitsrisiko in WinRAR und Co. durch Schwachstelle in UNACEV2.DLL

Information von kgborn vor 2 TagenSicherheit

In der seit 2005 nicht mehr aktualisierten Bibliothek UNACEV2.DLL gibt es eine Path-Traversal-Schwachstelle. Diese ermöglicht es, bei ACE-Archiven Dateien ...

Internet

CDU Propaganda: Urheberschutz im Internet - Ende des digitalen Wild-West

Information von Frank vor 3 TagenInternet6 Kommentare

Hallo Administratoren, aus einem Kommentar heraus habe ich folgenden Beiträge von Herr Sven Schulze und Axel Voss (beide CDU ...

Heiß diskutierte Inhalte
Windows Tools
Dateiname Automatisch auf PDF Klartext oder als Barcode abdrucken
Frage von spongebob24Windows Tools29 Kommentare

Hallo Zusammen, habe eine tolle Anforderung bekommen. Ich sollte auf mehrere PDF Dateien Automatisch einen Stempel anbringen lassen. Toll ...

Internet
SDSL oder ADSL - Preis-Leistungs-Verhältnis
Frage von ZeppelinInternet22 Kommentare

Wehrte Community, der Unterschied dieser beiden Techniken ist recht einfach erklärt. Das S, steht für Synchron (Gleich) und das ...

Microsoft Office
MicroSoft und seine Lizenzen
Frage von ZeppelinMicrosoft Office20 Kommentare

Wehrte Community, ich wende mich an die Community weil MicroSoft dazu keine Stellung nehmen möchte. Ich öffne mein Web-Browser ...

Hyper-V
Setup zu 2019 Hyper-V Coreserver gesucht
Frage von DerWoWussteHyper-V17 Kommentare

Moin. Ich habe unter die Möglichkeit, Hyper-V-Server 2012 R2 runterzuladen! Tolle Wurst, Microsoft! Nehme ich eine andere Quelle, nämlich ...