2013-04-22 1 views
0

В продолжение сценария, предоставленного rojo, в escape double quotes in param file to batch script, после того, как я проанализировал исходный файл данных, мне нужно вызвать скрипт .vbs из пакета. Сценарий .vbs должен быть снабжен двумя токенами, созданными при анализе исходного файла данных. Один из токенов - это URL-адрес файла на сервере, а другой - путь на локальном диске. Сценарий .vbs загружает указанный файл, указанный токеном, на локальный путь, указанный маркером два. Что я хочу сделать, так это вызвать скрипт .vbs в приведенном выше скрипте и передать в него параметры токенов. myvbscript.vbs/FileURL: "https://abc.com/a.pdf" /HDLocation:"C:\a.pdf "вызывать .vbs из командного скрипта

Вот файл .bat, который у меня есть.

@if(@[email protected]) @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

Код работал отлично, хотя вы могли отказаться от «start» «cmd/c» и просто запустить 'cscript' напрямую. Как именно он «не работает» для вас? Вы получили сообщение об ошибке? Какова ценность 'objXMLHTTP.Status'? –

+0

Код, который я обновил ниже, должен предоставить вам то, что вам нужно. – AxGryndr

ответ

0

В вашем использовании файла:

Для .BAT вызывающего .VBS

cscript //nologo [FILE.vbs] argsX argsY 

Для .js вызывающего .VBS

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

Вам нужно будет прочитать t он два параметра в ваших .vbs и делать, что вы можете использовать:

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

Ваш код имеет это, но я думал, что я хотел бы сделать заметку о том, как это делается для тех, кто еще ищет подобное решение.

Теперь вы можете использовать аргументы/параметры, как и переменные в коде.

Пример .BAT был протестирован с использованием testB.bat и внутри него были следующие строки кода.

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

Пример .JS был протестирован с использованием test.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 создается два окна сообщений. Первый говорит «Эй», а второй говорит «Там».

+0

Привет, я вызвал код, который вы указали выше в Jscript. Однако я получаю эту ошибку: ошибка времени выполнения Microsoft JScript: «cscript» не определен. Мне нужно вызвать vbscript в JScript-части, поскольку у меня есть маркеры в Jscript. – user646108

+0

Запуск командных файлов (или доступ к чему-либо на локальном компьютере пользователя) обычно блокируется/запрещается браузерами. Его ОГРОМНЫЙ риск для безопасности. – StingyJack

+1

Javascript \ Jscript - это основанные на браузере (в основном) языки сценариев. Сценарий «pushd/start», указанный в вашем вопросе, предназначен для запуска из командной строки, а не в браузере. – StingyJack