2015-03-19 2 views
0

Я сделал идеальный квадратный искатель чисел, который начинается с 1 и код ниже. Тем не менее, мне нужен способ передачи переменных между пакетным и vbscript (у VBS есть лучший интерфейс). Я застрял на этом этапе, как мне отправить переменную между пакетом и vbscript? Если что-то возможно, vbscript напечатает число в файл, тогда пакетный скрипт читает файл, а число в нем удаляет его.Как передать переменную между Batch и VBS?

@echo off 
title Perfect Squares without paste to file 
cls 

set /a num=3 
set /a num1=1 
echo 1 

:1 
set /a num2=%num1%+%num% 
echo %num2% 
echo %num2% 
set /a num1=%num2% 
set /a num=%num%+2 
goto 1 
+2

Вы можете использовать аргументы командной строки при вызове пакетных файлов для передачи данных из VBS –

+0

Пожалуйста, покажите часть VBS. Непонятно, пожалуйста, уточните, вам нужно перейти от партии к VBS или от VBS до партии? [Этот ответ] (https://stackoverflow.com/a/34321609/2165759) может быть полезен. – omegastripes

ответ

1

Вы можете запустить VBScript из пакетного файла, как это (параметр //NoLogo предотвращает интерпретатору печатая версия/копирайта все время):

cscript //NoLogo C:\your.vbs 23 

Используйте Arguments свойство для получения аргумента (23) в VBScript:

value = WScript.Arguments(0) 

и передать значение обратно в пакетном сценарии с помощью возвращаемого значения:

WScript.Quit 42 

Пример:

VBScript код:

value = WScript.Arguments(0) 
WScript.Quit value + 19 

Код партии:

@echo off 

cscript //NoLogo C:\your.vbs %1 
echo %errorlevel% 

Выход:

C:\>batch.cmd 23 
42 

C:\>batch.cmd 4 
23

Если вам нужно передать текст туда и обратно, передавая ответ обратно пакетного сценария становится все более сложным. Вам нужно что-то вроде этого:

for /f "tokens=*" %%r in ('cscript //NoLogo C:\your.vbs %1') do set "res=%%r" 

Пример:

VBScript код:

str = WScript.Arguments(0) 
WScript.StdOut.WriteLine str & " too" 

Код партии:

@echo off 

setlocal 

for /f "tokens=*" %%r in ('cscript //NoLogo C:\your.vbs %1') do set "res=%%r" 
echo %res% 

Выход:

C:\>batch.cmd "foo" 
foo too 

C:\>batch.cmd "and some" 
and some too

В более общем примечании: почему вы используете пакет/VBScript в первую очередь? PowerShell гораздо более универсален, чем оба из них объединены и доступны для любой версии Windows на любой половине.

Смежные вопросы