Vbscript 将阵列输出到MsgBox

Vbscript 将阵列输出到MsgBox,vbscript,Vbscript,我不使用PowerShell而不是VBScript,所以我有点迷路了。我试图在MsgBox中列出所有映射驱动器(驱动器号和共享路径)。运行脚本时出现类型不匹配错误。如果我将“Dim myArray()”更改为“Dim myArray”,则只能从变量中获取一项 Set objNetwork = WScript.CreateObject("WScript.Network") Set colDrives = objNetwork.EnumNetworkDrives Dim myArray() For

我不使用PowerShell而不是VBScript,所以我有点迷路了。我试图在MsgBox中列出所有映射驱动器(驱动器号和共享路径)。运行脚本时出现类型不匹配错误。如果我将“Dim myArray()”更改为“Dim myArray”,则只能从变量中获取一项

Set objNetwork = WScript.CreateObject("WScript.Network")
Set colDrives = objNetwork.EnumNetworkDrives
Dim myArray()
For i = 0 to colDrives.Count-1 Step 2
 myArray = colDrives.Item(i) & vbTab & colDrives.Item (i + 1)
Next
MsgBox(myArray)

如何将数据保存到数组中,然后输出到MsgBox?

您可以使用字符串并不断向其追加(
&


您可以使用一个字符串并在其后面添加(
&


代码无法工作的原因是,您正在创建没有实际大小的固定大小数组(
Dim myArray()
),然后尝试为该数组赋值。在VBScript中,必须将值指定给数组位置(
myArray(pos)=val
),并且不能附加到内置数组中(至少不需要一些额外的工作)

在您的案例中,最直接的方法是建议的方法。但是,如果需要,可以使用数组执行此操作。您只需要这样一个可调整大小的数组:

ReDim myArray(-1)  'empty array
For i = 0 to colDrives.Count-1 Step 2
  ReDim Preserve myArray(UBound(myArray)+1)
  myArray(UBound(myArray)) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray, vbNewLine)
Set myArray = CreateObject("System.Collections.ArrayList")
For i = 0 to colDrives.Count-1 Step 2
  myArray.Add colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray.ToArray, vbNewLine)
或者(使用),如下所示:

ReDim myArray(-1)  'empty array
For i = 0 to colDrives.Count-1 Step 2
  ReDim Preserve myArray(UBound(myArray)+1)
  myArray(UBound(myArray)) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray, vbNewLine)
Set myArray = CreateObject("System.Collections.ArrayList")
For i = 0 to colDrives.Count-1 Step 2
  myArray.Add colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray.ToArray, vbNewLine)
由于在进入循环之前已经可以确定数组的大小,因此您也可以立即使用适当的大小对数组进行尺寸标注,以避免重复重新尺寸标注(对于VBScript内置数组,这往往会导致性能不佳):

另一种选择是使用:


代码无法工作的原因是,您正在创建没有实际大小的固定大小数组(
Dim myArray()
),然后尝试为该数组赋值。在VBScript中,必须将值指定给数组位置(
myArray(pos)=val
),并且不能附加到内置数组中(至少不需要一些额外的工作)

在您的案例中,最直接的方法是建议的方法。但是,如果需要,可以使用数组执行此操作。您只需要这样一个可调整大小的数组:

ReDim myArray(-1)  'empty array
For i = 0 to colDrives.Count-1 Step 2
  ReDim Preserve myArray(UBound(myArray)+1)
  myArray(UBound(myArray)) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray, vbNewLine)
Set myArray = CreateObject("System.Collections.ArrayList")
For i = 0 to colDrives.Count-1 Step 2
  myArray.Add colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray.ToArray, vbNewLine)
或者(使用),如下所示:

ReDim myArray(-1)  'empty array
For i = 0 to colDrives.Count-1 Step 2
  ReDim Preserve myArray(UBound(myArray)+1)
  myArray(UBound(myArray)) = colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray, vbNewLine)
Set myArray = CreateObject("System.Collections.ArrayList")
For i = 0 to colDrives.Count-1 Step 2
  myArray.Add colDrives.Item(i) & vbTab & colDrives.Item(i+1)
Next

MsgBox Join(myArray.ToArray, vbNewLine)
由于在进入循环之前已经可以确定数组的大小,因此您也可以立即使用适当的大小对数组进行尺寸标注,以避免重复重新尺寸标注(对于VBScript内置数组,这往往会导致性能不佳):

另一种选择是使用: