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

Beitrag lesen

Hallo Romero,

lass die Finger von readAll. Dann hast Du alle Dateinamen in einem String stehen und müsstest darin nach Zeilenumbrüchen suchen, um die einzelnen Namen zu finden. Mit readLine ist es einfacher, dann hast Du die Namen gleich einzeln und kannst sie einsammeln. Das ist in VBscript allerdings etwas mühsam, weil es keine Array mit automatischer Längendynamik hat. Man muss es von Hand bauen.

In VBScript musst Du dich entweder mit REDIM herumschlagen oder einfach ein Maximum an Treffern voraussetzen. Ich mach's mal mit REDIM. Der Code ist so wie er hier steht ungetestet (mein Testcode sieht etwas anders aus), müsste aber klappen.

Dim WshShell, wx, pattern, line
Dim anzZeilen, maxZeilen

set WshShell = CreateObject("WScript.Shell")
pattern = Replace(Hauptpfad, "/", "\") & "\" & Replace(Datei, "/", "\") & "*"
set wx = WshShell.Exec("cmd.exe /c dir " & pattern & " /b")
anzNamen = 0
redim namen(10)
do
   line = wx.StdOut.ReadLine()
   if anzNamen > UBound(namen) then
      redim preserve namen(UBound(namen)*2)
   end if
   namen(anzNamen) = line
   anzNamen = anzNamen + 1
loop while Not wx.StdOut.AtEndOfStream
redim preserve namen(anzNamen)

Mit REDIM namen(10) erzeugst Du ein dynamisches Array, dessen Größe Du modifizieren kannst. Eine naive Lösung würde die Größe pro Schleifendurchlauf um 1 erhöhen, das ist aber ein furchtbares Geschüttele im Speicher. Darum macht man es so, wie oben gezeigt: Größe immer weiter verdoppeln, bis alles drin ist, und dann den Überschuss entfernen.

Nach dieser Fummelei hast Du in namen ein Array mit exakt so vielen Einträgen, wie Du Treffer hattest, und kannst es weiterverarbeiten wie du willst.

Aber mal blöd gefragt: Wieso tust Du Dir diesen krummen Hund VBScript überhaupt an? Grundsätzlich gibt es das WScript-Objekt und seine Methoden auch in JScript. Hier ein Beispiel für eine JScript-Implementierung (herauszufinden, wie ein VBScript Replace in JScript aussieht, überlasse ich Dir):

wsh = WScript.CreateObject("WScript.Shell");
wshExec = wsh.Exec("CMD /C DIR  /b");

namen = [];

while(!wshExec.StdOut.AtEndOfStream)
{
   namen.push(wshExec.StdOut.ReadLine());
}

WScript.Echo ("Gefunden: " + namen.length + " Namen");
for (i=0; i<namen.length; i++)
   WScript.Echo ("   " + i + ": " + namen[i]);

Rolf