在VBScript中使用数组的问题

时间:2013-12-11 15:05:58

标签: vbscript

我修改了这个脚本,因此它可以在多个目录上运行。但是,当我运行脚本时,我在第6行收到错误消息,char 3“无效的过程调用或参数”。我是VB脚本的新手,但我认为我可以调用一个带变量作为参数的函数。

Dim loc(2)
loc(0) = "C:\Users\Default\AppData\Local\Temp\"

for each path in loc
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set folder = fso.GetFolder(path)

  ' delete all files in root folder
  for each f in folder.Files
     On Error Resume Next
     name = f.name
     f.Delete True
     If Err Then
       'WScript.Echo "Error deleting:" & Name & " - " & Err.Description
     Else
       'WScript.Echo "Deleted:" & Name
     End If
     On Error GoTo 0
  Next

  ' delete all subfolders and files
  For Each f In folder.SubFolders
     On Error Resume Next
     name = f.name
     f.Delete True
     If Err Then
       'WScript.Echo "Error deleting:" & Name & " - " & Err.Description
     Else
       'WScript.Echo "Deleted:" & Name
     End If
     On Error GoTo 0
  Next
Next

1 个答案:

答案 0 :(得分:0)

您正在声明一个最高索引为2的数组。这将是一个包含三个项目的数组:零,一和二。然后,您只初始化该数组中的一个项目,即项目零。第一次通过循环,没关系。第二次,它从数组中获取第二项并将path设置为等于它。第二个数组项等于Nothing,因为您从未将其初始化为其他任何内容,因此path等于Nothingfso.GetFolder(path)等于path时,Nothing失败。

当我将数组声明更改为loc(0)时,它只有一个项目,项目为零。然后你的代码对我来说很好。

Dim loc(0)

这个声明对我来说看起来非常违反直觉,但是编译器喜欢它。

或者,您可以初始化原始数组中的所有三个项目:

loc(0) = "C:\Users\Default\AppData\Local\Temp\"
loc(1) = "C:\Users\Default\AppData\Local\Temp\blah"
loc(2) = "C:\Users\Default\AppData\Local\Temp\foobar"

......或者其他什么。但是这些路径应该是真实的目录,否则fso.GetFolder()将失败,因为它们不存在。那个错误看起来像这样:

path.vbs(8, 3) Microsoft VBScript runtime error: Path not found