2011-10-18 1 views
1

特定のディレクトリ内のすべてのファイルを実行するvbScriptを作成しようとしています(バッチファイルがほとんどです)。ディレクトリ内のすべてのファイルを実行するvbScript

私はすべてのファイルを削除するスクリプトを修正しようとしましたが、動作させることができません。ここで

は私が持っているものです。

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 

のMsgBoxラインは、私が実行したいの完全なパスとファイル名を表示しますが、実行行は、ファイルが見つからないエラーが発生します。

+0

最初のファイルで動作すると仮定すると、最初のファイルの後のすべてのファイルで失敗します。これは正しいです? –

答えて

2

変数strFilesは、連続して改行を含むファイルのリストを作成します。

反復1: strFiles =

 
test1.bat 

反復1フォルダにファイル "test1.bat" と "test2.bat" が含まれている場合たとえば、あなたがこれで終わるだろう: strFiles =

 
test1.bat 
test2.bat 

は、私は、これはあなたが何をしたいとは思いません。各スクリプトを順番に実行したい場合は、単一のスクリプト名を渡すだけです。

はこれに内部ループを変更してみてください:

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

これは非常にずさんなアプローチです。一度にバッチファイルのディレクトリ全体を実行する必要がある場合は、それらを正しく使用していません。いつでも1つのバッチファイルまたは1つのスクリプトが必要です。私はあなたが達成しようとしていることが何であれ、より良いアプローチのためにシステム全体を見始めるでしょう。

関連する問題