Zwei Ordner durchsuchen
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 174525
Url: https://administrator.de/forum/zwei-ordner-durchsuchen-174525.html
Ausgedruckt am: 16.05.2025 um 02:05 Uhr
18 Kommentare
Neuester Kommentar
Hier eine Möglichkeit:
set objFS = Wscript.CreateObject("Scripting.FileSystemObject")
set f1 = objFS.GetFolder("c:\temp\f1")
set f2 = objFS.GetFolder("c:\temp\f2")
suchObjekt = "NachdiesemPDFsucheich.pdf"
if parseFolder(f1) = true or parseFolder(f2) = true then
wscript.Echo "Found"
else
wscript.Echo "Not Found"
end if
Function parseFolder(fldr)
dim found
For each file in fldr.Files
if file.name = suchObjekt then
parseFolder = true
exit function
end if
Next
For Each subFolder in fldr.SubFolders
if parseFolder(subFolder) = true then
parseFolder = true
exit function
end if
Next
End Function
'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.
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.
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:
proof of concept
Grüße
Biber
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:
' F:\schnipsel\parsefolders.vbs
Dim objFS, f1, f2
set objFS = Wscript.CreateObject("Scripting.FileSystemObject")
set f1 = objFS.GetFolder("D:\temp")
set f2 = objFS.GetFolder("f:\schnipsel")
targetType = "vbs"
if (parseFolder(f1) or parseFolder(f2) ) then
wscript.Echo "Found"
else
wscript.Echo "Not Found"
end if
Function parseFolder(fldr)
parsefolder = false
For each file in fldr.Files
If LCase(objFS.GetExtensionName(file.Name)) = LCase(targetType) Then
if DateDiff("d",file.DateCreated, Date) = 0 then
parseFolder = true
WScript.echo fldr.name , ":" ,file.name , file.DateCreated
'send a message
Exit Function
End if
End if
Next
End Function
proof of concept
>f:\schnipsel\parsefolders.vbs
schnipsel : parsefolders.vbs 12.10.2011 22:20:05
Found
Grüße
Biber
Das hatte ich doch schon ganz zu Anfang mit der parseFolder "Function" demonstriert...
denke dein Problem sollte hiermit einen Abschluss finden:
denke dein Problem sollte hiermit einen Abschluss finden:
Dim f1, f2, targetType, fso, filePdf, currentDate
Set fso = CreateObject("Scripting.FileSystemObject")
f1 = "D:\test1"
f2 = "E:\Customer NOV\PdfFile"
targetType = "pdf"
currentDate = Date()
sucheDateiInOrdner(f1)
sucheDateiInOrdner(f2)
Function sucheDateiInOrdner(ordner)
For Each filePdf In fso.GetFolder(ordner).Files
If LCase(fso.GetExtensionName(filePdf.Name)) = LCase(targetType) Then
If ( filePdf.DateCreated < currentDate ) Then
WScript.echo filePdf.Name & " " & filePdf.DateCreated
listeErstellen 'subaufruf
End If
End If
Next
End Function
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 ...
Ein wenig Grundlagen VBS Lektüre wäre angesagt ...
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 ...
Und hier eine Referenz: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id ...