2 Stimmen

vbScript zum Ausführen aller Dateien in einem Verzeichnis

Ich versuche, ein vbScript zu schreiben, das alle Dateien in einem bestimmten Verzeichnis ausführt (meist sind es Batch-Dateien).

Ich habe versucht, ein Skript zu ändern, das alle Dateien löscht, aber ich kann es nicht zum Laufen bringen.

Hier ist, was ich habe:

Option Explicit 
'=========================================================================== 
'  Scheduled Task - Visual Basic ActiveX Script 
'=========================================================================== 

Call ExecuteDirectory("c:\users\public\documents\schedule\daily") 

Function ExecuteDirectory(strPath2Folder) 
    Dim fso, f, fc, f1, strFiles, intFiles
    Dim WshShell

    Set WshShell = CreateObject("WScript.Shell")

    strFiles = "" 

    Set fso = CreateObject("Scripting.FileSystemObject") 
    If (fso.FolderExists(strPath2Folder)) Then 
        Set f = fso.GetFolder(strPath2Folder) 
        Set fc = f.Files 

        '-- Execute each file in Folder 
        For Each f1 in fc 
            strFiles = strFiles & f1.Name & vbCrLf 
            msgbox strPath2Folder & "\" & strFiles

            WshShell.Run Chr(34) & strFiles & Chr(34), 1, true
        Next 

        Set f1 = Nothing 
        Set fc = Nothing 
        Set f = Nothing 

    End If 
    Set fso = Nothing 
End Function

In der msgbox-Zeile werden der vollständige Pfad und der Name der auszuführenden Datei angezeigt, aber in der Run-Zeile wird die Datei nicht gefunden.

2voto

bobbymcr Punkte 23043

Die Variable strFiles baut kontinuierlich eine Liste von Dateien mit Zeilenumbrüchen dazwischen auf. Wenn Ihr Ordner zum Beispiel die Dateien "test1.bat" und "test2.bat" enthält, erhalten Sie folgendes Ergebnis:

Iteration 1 : strFiles =

test1.bat

Iteration 1 : strFiles =

test1.bat
test2.bat

Ich glaube nicht, dass Sie das tun wollen. Wenn Sie jedes Skript der Reihe nach ausführen wollen, sollten Sie nur den einzelnen Skriptnamen übergeben.

Versuchen Sie, die innere Schleife wie folgt zu ändern:

    For Each f1 in fc  
        Dim fileToRun
        fileToRun = strPath2Folder & "\" & f1.Name
        WshShell.Run Chr(34) & fileToRun & Chr(34), 1, true 
    Next

-1voto

Nilpo Punkte 4502

Dies ist ein sehr schlampiger Ansatz. Wenn Sie ein ganzes Verzeichnis von Batchdateien auf einmal ausführen müssen, dann verwenden Sie sie nicht richtig. Sie sollten immer nur eine Batch-Datei oder ein Skript benötigen. Ich würde mir Ihr gesamtes System ansehen, um einen besseren Ansatz für das zu finden, was Sie zu erreichen versuchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X