【发布时间】:2023-05-17 03:08:01
【问题描述】:
继续 rojo 在escape double quotes in param file to batch script 提供的脚本,在我解析了初始数据文件之后,我需要从批处理中调用一个 .vbs 脚本。 .vbs 脚本需要提供通过解析初始数据文件生成的 2 个令牌。其中一个令牌是服务器上文件的 URL,另一个是本地磁盘上的路径。 .vbs 脚本将令牌一指定的指定文件下载到令牌二指定的本地路径。 我想要做的是在上面的脚本中调用 .vbs 脚本并将令牌作为参数传递给它。 myvbscript.vbs /FileURL:"https://abc.com/a.pdf" /HDLocation:"C:\a.pdf"
这是我拥有的 .bat 文件。
@if(@a==@b) @end
/* :: batch portion
@ECHO OFF
setlocal if exist "%~1"
( cscript /nologo /e:jscript "%~f0" < "%~1" )
else ( cscript /nologo /e:jscript "%~f0" )
exit /b
:: JScript portion */
while (!WSH.StdIn.AtEndOfLine) {
var line=WSH.StdIn.ReadLine();
var st_token = line.split('\t');
var FileUR="abc.com/a.pdf";
var HDLocation="C:\a.pdf";
WSH.Echo(req_id);
WSH.Echo(att_tokens[i]);
<<INVOKE VBSCRIPT WITH PARAMETERS>>
我需要调用 vbscript 来代替 <<INVOKE VBSCRIPT WITH PARAMETERS>> 请帮助}
请帮助我调用上面脚本中的 .vbs 脚本,并将令牌作为参数传递。
.vbs 脚本如下:
'Set your settings
Set colNamedArguments = WScript.Arguments.Named
strFileURL = colNamedArguments.Item("FileURL")
strHDLocation = colNamedArguments.Item("HDLocation")
' Fetch the file
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()
If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary
objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0 'Set the stream position to the start
Set objFSO = Createobject("Scripting.FileSystemObject")
If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
Set objFSO = Nothing
objADOStream.SaveToFile strHDLocation
objADOStream.Close
Set objADOStream = Nothing
End if
Set objXMLHTTP = Nothing
【问题讨论】:
-
代码对我来说工作得很好,虽然你可以放弃
start "" cmd /c,直接运行cscript。它究竟对您“不起作用”如何?你有错误吗?objXMLHTTP.Status的值是多少? -
我在下面更新的代码应该可以满足您的需求。
标签: vbscript batch-file jscript