我正在尝试编写一个将执行给定目录中所有文件的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
不断构建一个文件列表,其中包含换行符。例如,如果您的文件夹包含文件“test1.bat”和“test2.bat”,您将最终得到:
迭代1 : strFiles =
test1.bat
迭代1 : 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)
这是一种非常草率的方法。如果您需要一次执行批处理文件的整个目录,那么您没有正确使用它们。您应该只需要一个批处理文件或一个脚本。我会开始考虑你的整个系统,以便更好地处理你想要完成的任何事情。