【问题标题】:Return a string from VBS to a batch file将字符串从 VBS 返回到批处理文件
【发布时间】:2013-11-25 15:38:55
【问题描述】:

我有一个批处理文件,它在执行期间正在运行一个 VBS 文件。 VBS 文件是从用户输入一些变量并生成一个字符串变量。现在,我希望在 VBS 脚本完成后,它应该将该字符串变量返回到批处理文件中,该文件可以在批处理文件中使用。

我阅读了几个教程,但是我无法做到这一点。我怎样才能做到这一点?

【问题讨论】:

    标签: batch-file vbscript cmd


    【解决方案1】:

    您可以尝试以下方法:

    @echo off
    setlocal EnableDelayedExpansion
    
    for /F "delims=" %%a in ('cscript.exe yourFile.vbs') do (
        rem Add processing of yous script here 
       )
    

    setlocal EnableDelayedExpansion 将变量扩展延迟到执行时间。这允许在 for 循环中使用变量。变量值是像 !var_name! 一样获得的,而不是 %var_name%。

    for /F "delims=" %%a in ('cscript.exe yourFile.vbs') 做 ( 执行你的 vbs 文件并在 for 循环中使用它的 putput。 cscript.exe 是命令行 vbs 解释器。 'cscript.exe yourFile.vbs' 的每一行都将存储在 %%a 变量中。这是循环变量名。

    希望这可以澄清。

    【讨论】:

    • 您错过添加,例如:echo The value returned by VBS is: %%a
    • 还有如何从VBS文件中发送变量?
    • 添加了一些解释。抱歉,但我不明白“还如何从 VBS 文件发送变量?”这句话。你能解释一下吗?
    • 表示应在 VBS 文件中用于返回值的代码。
    • 好了,终于找到了`WScript.StdOut.Write "Hello World"`
    【解决方案2】:

    这是一个向您展示如何操作的示例。

    您只需从 vbs 中回显答案并使用 for 阅读即可。

    call :Convertbytes 102523432123 MB free
    exit /b
    
    :ConvertBytes bytes unit ret
    setlocal
    if "%~2" EQU "KB" set val=/1024
    if "%~2" EQU "MB" set val=/1024/1024
    if "%~2" EQU "GB" set val=/1024/1024/1024
    if "%~2" EQU "TB" set val=/1024/1024/1024/1024
    > %temp%\tmp.vbs echo wsh.echo FormatNumber(eval(%~1%val%),0)
    for /f "delims=" %%a in ( 
      'cscript //nologo %temp%\tmp.vbs' 
    ) do endlocal & set %~3=%%a
    del %temp%\tmp.vbs
    exit /b
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多