从批处理脚本调用.vbs

时间:2013-04-22 16:19:49

标签: vbscript batch-file jscript

继续使用rojo在escape double quotes in param file to batch script提供的脚本,在解析了初始数据文件之后,我需要从批处理中调用.vbs脚本。 .vbs脚本需要提供2个通过解析初始数据文件生成的标记。其中一个令牌是服务器上文件的URL,另一个是本地磁盘上的路径。 .vbs脚本将令牌1指定的指定文件下载到令牌2指定的本地路径。 我想要做的是在上面的脚本中调用.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

1 个答案:

答案 0 :(得分:0)

在您的文件中使用:

.BAT呼叫.VBS

cscript //nologo [FILE.vbs] argsX argsY

对于.JS呼叫.VBS

 wsShell = WScript.CreateObject("WScript.Shell");
 wsShell.run ("[FILE.VBS] argsX argsY");

您需要将两个参数读入.vbs并执行以下操作:

Set args = WScript.Arguments
argsX = args.Item(0)
argsY = args.Item(1)

你的代码有这个,但我想我会记下如何为其他寻找类似解决方案的人做这件事。

现在您可以像使用代码中的变量一样使用参数/参数。

.BAT示例使用testB.bat进行测试,其中是以下代码行。

@ECHO OFF
cscript //nologo testv.vbs Hey There

使用test.js测试了.JS示例,其中包含以下代码行。

wsShell = WScript.CreateObject("WScript.Shell");
wsShell.run ("testV.VBS Hey There");

testV.vbs中的代码行如下。

Set args = WScript.Arguments
firstArg = args.Item(0)
secondArg = args.Item(1)
MsgBox(firstArg)
MsgBox(secondArg)

所有文件都存储在同一目录中。双击test.js或testB.bat文件会创建两个消息框。第一个说“嘿”,第二个说“有”。