如何将Node.js的JavaScript文件作为批处理文件运行

目标

希望像在Windows系统中运行Node.js的JS文件,就像运行Bat文件一样。

首先

在 Windows 上有一个叫做 WSH(Windows Scripting Host)的 JScript,它是 JavaScript 的一种,可以通过双击保存为 .js 扩展名的文件来运行,非常方便。

然而,它有一些弱点,就是使用了相当古老的JavaScript。对于最近的前端开发人员和Node.js开发人员来说,可能会被嘲笑说根本用不了WSH。

所以,我們放棄了 WSH JScript,作為替代,將 Node.js 的 JavaScript 集成到 Bat 檔案中。

通过用Node.js JavaScript取代Windows Bat文件,可以提高Bat开发的效率。由于是Bat文件,因此可以轻松地通过图形用户界面(如资源管理器)进行调用。此外,Node.js程序与GUI之间的协作也非常方便。

请安装 Windows 版的 Node.js。

将Node.js的JavaScript嵌入到Bat文件中。

作为一个示例,我将下一个文件放置在 C:\temp\test\nodeInBat\ 这个位置。

//&cls&node %0 %1&pause > nul&exit

var child_process = require('child_process');

function cmdRun(command) {
  return child_process.execSync(command).toString();
}

function cmdOut(command){
    result = cmdRun(command);
    console.log("> " + command + "\n => " + result);
  return result;
}

cmdOut( "echo test" );

ret = cmdOut( "node -v" );

console.log( "nodejsバージョン:" + ret.match( /[0-9\.]+/ )[0]);
console.log("");
console.log("引数:"+ process.argv);

var i = 0;
process.argv.toString().split(',').forEach(function(element) {
  i += 1;
  console.log(i.toString() + ' ' + element);
});

运行.bat文件时,会显示命令提示符,并产生以下输出结果。

> echo test
 => test

> node -v
 => v9.10.1

nodejsバージョン:9.10.1

引数:C:\Program Files\nodejs\node.exe,C:\temp\test\nodeInBat\nodeInBat.bat
1 C:\Program Files\nodejs\node.exe
2 C:\temp\test\nodeInBat\nodeInBat.bat

如果在Bat文件中用拖放的方式传递参数为test.txt文件,则输出结果如下。

> echo test
 => test

> node -v
 => v9.10.1

nodejsバージョン:9.10.1

引数:C:\Program Files\nodejs\node.exe,C:\temp\test\nodeInBat\nodeInBat.bat,C:\temp\test\nodeInBat\test.txt
1 C:\Program Files\nodejs\node.exe
2 C:\temp\test\nodeInBat\nodeInBat.bat
3 C:\temp\test\nodeInBat\test.txt

我也确认了可以接收参数。

批处理文件的首行机制

我将解释一下nodeInBat.bat文件中的第一行Bat文件的内容。

这是第一行。

//&cls&node %0 %1&pause > nul&exit
    //

在JavaScript中这是注释,但在批处理文件中是无意义的命令。在批处理文件中,通常情况下此行是

'//' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

输出将如下所示。接下来是下一个命令。

    &cls

在这里,数据将被清除,因此变得不可见。

    &node %0 %1

在这里调用了node命令,%0代表这个文件自身,%1代表传递给Bat的参数。
由于将自己的文件作为参数传递给了node命令,因此这个文件的JavaScript代码会被执行。

    &pause

在这条命令中,会停止运行。

    > nul

将输出保存为空文件。如果不这样做,将会提示处于等待状态的暂停命令。

続行するには何かキーを押してください . . .

为了消除这个消息的出现,

    exit

这里,在文件中已经结束了作为Bat文件的处理。
这样做可以防止包含Node.js的Bat文件中的JavaScript部分代码被识别为Bat文件,并避免出现错误。

应用

去掉开头的”Pause”和”> null”,命令提示符窗口的显示会在执行后立即消失。

//&cls&node %0 %1&exit

如果你的Bat程序不需要显示输出结果,可以按照以下步骤处理。

另外,如果想要接受更多的参数,可以通过以下方式增加%数字。

//&cls&node %0 %1 %2 %3 %4&pause > nul&exit

请提供更多上下文信息,以便我能够准确地为您提供答案。

用Node.js编写Windows批处理的模板。

感谢这段代码,我学到了很多。

bannerAds