我制作了一个完美的方形数字查找器,从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
答案 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版本。