【问题标题】:How to Pass a Variable Between Batch and VBS?如何在 Batch 和 VBS 之间传递变量?
【发布时间】:2015-05-23 03:03:46
【问题描述】:

我做了一个完美的平方数查找器,从 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

【问题讨论】:

  • 您可以在调用批处理文件时使用命令行参数来传递来自 VBS 的数据
  • 请出示VBS部分。不清楚,请详细说明您需要从批次传递到VBS 还是从VBS 传递到批次? This answer 可能会有所帮助。

标签: batch-file vbscript


【解决方案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 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-23
    • 2011-12-03
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多