Rolf b: DIR-Funktion in VBS oder FileExists in Javascript mit Platzhalter

Beitrag lesen

Das Problem ist, dass der eigentliche Directory Scan schnell geht (GetFolder(xyz).Files), aber das Abfragen des Dateinamens dazu führt, dass er ein File-Objekt für diesen Eintrag initialisiert. Und das DAUERT. Warum es bei Dir 10 Minuten dauert, ist mir nicht ganz klar; ich habe mir einen Ordner mit 150K Dateien angelegt und da dauerte es 15s, alle Dateinamen nach einem Muster zu durchsuchen. Liegt dein Ordner im Netzwerk?

Wenn Du das Scripting.FileSystemObject nutzen kannst, dann auch bestimmt das WScript.Shell Objekt, gelle?

Du kannst dich an diesem Snippet hier orientieren. Das ermittelt die gewünschten Dateinamen über einen DIR Befehl per Kommandozeile. Dieser Ablauf ist schnell. An Stelle von a* musst Du das gewünschte Suchmuster eintragen. Sollten Deine Dateinamen Leerstellen enthalten, musst Du auch noch Anführungszeichen drumherum setzen. Windows Kommandozeile eben.

Das Script führt mittels cmd.exe /c dir den DIR Befehl der Windows Befehlszeile aus. Die DIR Option /b führt dazu, dass DIR nur die Dateinamen ausgibt und nicht den übrigen Schnickschnack drumherum. Exec gibt Dir ein WshScriptExec Objekt zurück, das die Standard-Streams des gestarteten Prozesses umleitet und dem Aufrufer zur Verfügung stellt. DIR schreibt auf die Standardausgabe, die kannst Du deshalb lesen und bekommst damit alle Dateinamen geliefert die auf das Muster passen.

set WshShell = WScript.CreateObject("WScript.Shell")
counter = 0
Set wx = WshShell.Exec("cmd.exe /c dir a* /b")
Do
    line = wx.StdOut.ReadLine()
    counter = counter + 1
Loop While Not wx.Stdout.atEndOfStream

WScript.Echo "Gezählt: " + cstr(counter)

Rolf