【发布时间】:2013-11-25 15:38:55
【问题描述】:
我有一个批处理文件,它在执行期间正在运行一个 VBS 文件。 VBS 文件是从用户输入一些变量并生成一个字符串变量。现在,我希望在 VBS 脚本完成后,它应该将该字符串变量返回到批处理文件中,该文件可以在批处理文件中使用。
我阅读了几个教程,但是我无法做到这一点。我怎样才能做到这一点?
【问题讨论】:
标签: batch-file vbscript cmd
我有一个批处理文件,它在执行期间正在运行一个 VBS 文件。 VBS 文件是从用户输入一些变量并生成一个字符串变量。现在,我希望在 VBS 脚本完成后,它应该将该字符串变量返回到批处理文件中,该文件可以在批处理文件中使用。
我阅读了几个教程,但是我无法做到这一点。我怎样才能做到这一点?
【问题讨论】:
标签: batch-file vbscript cmd
您可以尝试以下方法:
@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 中回显答案并使用 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
【讨论】: