将值从已执行的 JScript 传递到批处理文件

Pass value from executed JScript to Batch File

我尝试了很多不同的关键字,例如 EchoreturnprintWScript.echo() 等,但无法找到 return 从 js 文件到 bat 文件的值。

我的 bat 文件的简化版本是对 js 文件的简单调用,并根据 returned ERRORLEVEL

打印
"myfile.js" 

IF ERRORLEVEL 1 GOTO Warnings
IF ERRORLEVEL 0 GOTO Success
:Warnings
ECHO Warning
GOTO End

:Success
ECHO Success

我的 JScript 文件执行我需要它执行的操作,并将错误计数存储在 var:

.
.
.    
var errorCount = tci.GetLastResultDescription().ErrorCount);

我的 objective 是 return 一个状态,告诉我是否有错误,所以基本上,我想做的就是:

if (errorCount>0)
    return 1;
else
    return 0;

然而,自然地,If 并不那么容易工作。有没有办法将值传回 bat 文件?

当然可以。你可以使用

WSH.Quit(tci.GetLastResultDescription().ErrorCount);

... 这将使 cscript 以错误计数的错误级别退出。如果您更喜欢布尔退出状态,那么

WSH.Quit(tci.GetLastResultDescritpion().ErrorCount ? 1 : 0);

您也可以使用 WSH.Echo 将其作为字符串传递,但这需要在 for /f 循环中执行 cscript 以捕获输出。如果我是你,我会使用 WSH.Quit(n)


就其价值而言,批处理 + JScript 在混合格式中工作得非常好。您可以将 myfile.js 和 myfile.bat 组合成一个 hybrid.bat 脚本。

@if (@CodeSection == @Batch) @then

@echo off
setlocal

cscript /nologo /e:JScript "%~f0" && (
    >&2 echo exit status was 0
) || (
    >&2 echo exit status was non-zero
)

goto :EOF

@end // end batch / begin JScript chimera

WSH.Quit(Math.round(Math.random()));

有关更多示例,请参阅 David Ruhmann's demo Gist