从批处理文件访问JavaScript方法

Accessing JavaScript method from a batch file

本文关键字:方法 JavaScript 访问 批处理文件      更新时间:2023-09-26

我在一个批处理文件中经历了多个类似Embedded js的post,这表明了将批处理文件和javascript相结合的可能性。我的问题是,是否可以在.bat文件中使用.js文件的方法?例如,用下面的一些方法定义一个js文件-

test.js

add:function(a, b){ return a+b;}

测试.bat

add(1, 2); ::Or something like add 1 2

输出

C:'>test

3

有几种方法可以做到这一点。下面的方法非常简单:

test.js

function add(a, b){ return a+b;}
function sub(a, b){ return a-b;}
WScript.Echo(eval(WScript.Arguments(0)));

测试.bat

@echo off
set eval=cscript //nologo test.js 
%eval% add(1,2)
%eval% sub(1,2)

输出

C:'> test
3
-1

在这种情况下,%eval%之后的表达式既不能包含空格,也不能包含特殊字符。要做到这一点,只需将表达式括在引号中:

%eval% "add(1,2) * 4 + sub(1,2)"

类似的东西(这很冗长,但这是我能想到的)?这将不适用于javascript,但适用于jscript和jscript.net(但要求有点不同的代码)

@if (@X)==(@Y) @end /* JScript comment
    @echo off
    call :add 1 2
    call :subst 5 2
    exit /b %errorlevel%
    :add [ a , b ]
        cscript //E:JScript //nologo "%~f0" add %~1 %~2 
    exit /b %errorlevel%
    :subst [ a , b ]
        cscript //E:JScript //nologo "%~f0" subst %~1 %~2 
    exit /b %errorlevel%



@if (@X)==(@Y) @end JScript comment */
var ARGS = WScript.Arguments;

function subst(a,b){
    WScript.Echo(a - b);
}
function add(a,b){
    WScript.Echo(a + b);
}
switch(ARGS.Item(0).toLowerCase()){
  case "subst":
    subst(ARGS.Item(1),ARGS.Item(2));
    break;
  case "add":
    add(ARGS.Item(1),ARGS.Item(2));
    break;
  default:
    WScript.Echo("wrong function");
    WScript.Quit(1);
}