如何在批处理和VBS之间传递变量?

时间:2015-03-19 20:11:54

标签: batch-file vbscript

我制作了一个完美的方形数字查找器,从1开始,代码在下面。但是,我需要一种在批处理和vbscript之间传递变量的方法(VBS具有更好的UI)。我陷入困境,如何在批处理和vbscript之间发送变量?如果有任何东西可能让vbscript在一个文件中打印一个数字,那么批处理脚本会读取该文件,然后删除它中的数字。

@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

1 个答案:

答案 0 :(得分:1)

您可以从这样的批处理文件中运行VBScript(参数//NoLogo阻止解释程序一直打印版本/版权标题):

cscript //NoLogo C:\your.vbs 23

使用Arguments属性在VBScript中接收参数(23):

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版本。