为什么我的VBScript字符串连接不起作用?

时间:2014-09-05 08:47:20

标签: arrays vbscript

我已经为文件下载编写了一个VBScript脚本。我使用这一行来构建下载URL:

strURL = DownloadDest & pdfs(n)

但是当我运行脚本时,strURL只获得DownloadDest值而没有pdfs(n)。为什么字符串连接不起作用?

完整的脚本:

dim pdfs(9)
pdfs(1) = "Karusel_PF_Promo18_food.pdf"
pdfs(2) = "Karusel_ZCHF_promo18_food.pdf"
pdfs(3) = "Karusel_YF_promo18_food.pdf"
pdfs(4) = "karusel_Moscow_promo18_food.pdf"
pdfs(5) = "Karusel_SVF_promo18_food.pdf"
pdfs(6) = "Karusel_VVF_Promo18_food.pdf"
pdfs(7) = "Karusel_SZF_Promo18_food.pdf"
pdfs(8) = "Karusel_SOCHI_promo18_food.pdf"
pdfs(9) = "Karusel_VLGRD_promo18_food.pdf"



Const scriptVer  = "1.0"
const DownloadDest = "http://karusel.ru/manager/img/PDF/"
Const LocalFile = "C:\Users\syurchen\Desktop\"
Const DownloadType = "binary"
dim strURL 
dim localfile2 

function getit(n)
  dim xmlhttp

  set xmlhttp = createobject("MSXML2.XMLHTTP.3.0")

  strURL = DownloadDest & pdfs(n)
  localfile2 = LocalFile & pdfs(n)
  msgbox "Download-URL: " & strURL

  xmlhttp.Open "GET", strURL, false

  xmlhttp.Send
  Wscript.Echo "Download-Status: " & xmlhttp.Status & " " & xmlhttp.statusText

  If xmlhttp.Status = 200 Then
    Dim objStream
    set objStream = CreateObject("ADODB.Stream")
    objStream.Type = 1 'adTypeBinary
    objStream.Open
    objStream.Write xmlhttp.responseBody
    objStream.SaveToFile localFile2
    objStream.Close
    set objStream = Nothing
  End If

  set xmlhttp = Nothing
End function 

For Each n In pdfs
  getit(n)
Next

2 个答案:

答案 0 :(得分:2)

VBScript数组索引从0开始。dim pdfs(9)创建一个包含10个(不是9个)元素的数组,但是您没有指定第0个元素,因此它默认为Empty。这就是为什么在第一次迭代pdf(n)Empty而不是包含文件路径。

您需要将代码更改为:

dim pdfs(8)
pdfs(0) = "Karusel_PF_Promo18_food.pdf"
pdfs(1) = "Karusel_ZCHF_promo18_food.pdf"
pdfs(2) = "Karusel_YF_promo18_food.pdf"
pdfs(3) = "karusel_Moscow_promo18_food.pdf"
pdfs(4) = "Karusel_SVF_promo18_food.pdf"
pdfs(5) = "Karusel_VVF_Promo18_food.pdf"
pdfs(6) = "Karusel_SZF_Promo18_food.pdf"
pdfs(7) = "Karusel_SOCHI_promo18_food.pdf"
pdfs(8) = "Karusel_VLGRD_promo18_food.pdf"

或者不要使用硬编码索引:

Dim pdfs
pdfs = Array ( _
    "Karusel_PF_Promo18_food.pdf", _
    "Karusel_ZCHF_promo18_food.pdf", _
    "Karusel_YF_promo18_food.pdf", _
    "karusel_Moscow_promo18_food.pdf", _
    "Karusel_SVF_promo18_food.pdf", _
    "Karusel_VVF_Promo18_food.pdf", _
    "Karusel_SZF_Promo18_food.pdf", _
    "Karusel_SOCHI_promo18_food.pdf", _
    "Karusel_VLGRD_promo18_food.pdf" _
)

其他提示:

  1. 如果将文件保存到桌面(而不是其他用户),请不要对桌面文件夹路径进行硬编码。使用SpecialFolders获取它:

    Dim oShell, strDesktop
    oShell = CreateObject("WScript.Shell")
    strDesktop = oShell.SpecialFolders("Desktop")
    ...
    localfile2 = strDesktop & pdfs(n)
    
  2. strURLlocalfile2变量仅在getit函数中使用,因此在该函数中最好Dim

    < / LI>
  3. scriptVerDownloadType常量未使用且可以删除。

答案 1 :(得分:0)

您使用for each来迭代pdfs

For Each n In pdfs
  getit(n)
Next

因此n是来自pdfs数组的字符串,但在getit内部使用n作为数组索引:

strURL = DownloadDest & pdfs(n)

这是类型不匹配错误。您的for each已经从数组中提取了字符串,因此您只需要在getit内使用它:

strURL = DownloadDest & n