我已经为文件下载编写了一个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
答案 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" _
)
其他提示:
如果将文件保存到桌面(而不是其他用户),请不要对桌面文件夹路径进行硬编码。使用SpecialFolders
获取它:
Dim oShell, strDesktop
oShell = CreateObject("WScript.Shell")
strDesktop = oShell.SpecialFolders("Desktop")
...
localfile2 = strDesktop & pdfs(n)
strURL
和localfile2
变量仅在getit
函数中使用,因此在该函数中最好Dim
。
scriptVer
和DownloadType
常量未使用且可以删除。
答案 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