VBScript для выполнения всех файлов в каталоге

#vbscript #wmi

#vbscript #wmi

Вопрос:

Я пытаюсь написать VBScript, который будет выполнять все файлы в данном каталоге (в основном это будут пакетные файлы).

Я пытался изменить скрипт, который удаляет все файлы, но я не могу заставить его работать.

Вот что у меня есть:

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

Call ExecuteDirectory("c:userspublicdocumentsscheduledaily") 


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 amp; f1.Name amp; vbCrLf 
            msgbox strPath2Folder amp; "" amp; strFiles

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

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


    End If 
    Set fso = Nothing 
End Function
  

В строке msgbox отображается полный путь и имя файла, который я хочу выполнить, но строка запуска генерирует ошибку file not found.

Комментарии:

1. Я предполагаю, что это работает для первого файла, а затем завершается сбоем для всех файлов после первого. Правильно ли это?

Ответ №1:

Переменная strFiles постоянно создает список файлов с разрывами строк между ними. Например, если ваша папка содержит файлы «test1.bat» и «test2.bat», вы получите следующее:

Итерация 1: strFiles =

test1.bat

Итерация 1: strFiles =

test1.bat
test2.bat

Я не думаю, что это то, что вы хотите сделать. Если вы хотите просто запускать каждый скрипт по порядку, вы должны просто передать одно имя скрипта.

Попробуйте изменить внутренний цикл на этот:

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

Ответ №2:

Это очень неаккуратный подход. Если вам нужно выполнить весь каталог пакетных файлов за один раз, значит, вы используете их неправильно. Вам должен понадобиться только один командный файл или один скрипт в любое время. Я бы начал изучать всю вашу систему для лучшего подхода к тому, чего вы пытаетесь достичь.