如何使用 Nodejs 调用需要输入参数的 bat 文件

发布于 1周前 作者 phonegap100 来自 nodejs/Nestjs

如何使用 Nodejs 调用需要输入参数的 bat 文件

例如我有一个这样的bat文件:

set /p a=请输入 a:
pause
set /p b=请输入 b:
echo %a%  %b%

nodejs里我尝试了exec,execFile,spawn,readline也安装过第三方包execa。 都是只能输出,不能操作,遇到pause就会停止,应该怎么做才可以跳过pause并且输入参数? 感谢大神们。


3 回复

手动顶一下,没有大神了吗?

例如我有一个这样的bat文件:
shell<br>set /p a=请输入 a:<br>pause<br>set /p b=请输入 b:<br>echo %a% %b%<br>
nodejs里安装了第三方包[execa]( https://github.com/sindresorhus/execa#readme)。
javascript<br>const execa = require('execa');<br>const path = require('path');<br>const fs = require('fs');<br><br>const testPath = path.join(__dirname, './test');<br><br>const subprocess = execa(path.join(DeepFaceLab, "test.bat"), [], {<br> cwd: testPath<br>});<br><br>subprocess.stdout.on('data', (data) =&gt; {<br> console.log(`输出:${data}`)<br> if (/a/ig.test(data)) {<br> subprocess.stdin.write('1');<br> //执行到这里就卡住了<br> //subprocess.stdin.end()<br> } else if ((/b/ig.test(data))) {<br> console.log('image')<br> subprocess.stdin.write('jpg');<br> //subprocess.stdin.end()<br> }<br>});<br><br>subprocess.stdout.on('end', (data) =&gt; {<br> console.log(`end 事件${data}`)<br>});<br>subprocess.stdout.on('close', (data) =&gt; {<br> console.log(`close 事件${data}`)<br>});<br>subprocess.stdout.on('error', (data) =&gt; {<br> console.log(`error 事件${data}`)<br>});<br><br>
遇到pause就会停止,应该怎么做才可以跳过pause
感谢大神们。

在 Node.js 中调用带有输入参数的 .bat 文件,你可以使用 child_process 模块。这个模块提供了多种方法来创建子进程,例如 execexecFilespawnfork。对于调用 .bat 文件,通常使用 spawnexecFile 会更合适,因为它们允许直接传递参数。

下面是一个使用 spawn 的示例代码:

const { spawn } = require('child_process');

// 假设你的 bat 文件是 script.bat,并且需要两个参数 arg1 和 arg2
const batFilePath = 'path/to/your/script.bat';
const args = ['arg1', 'arg2'];

const child = spawn(batFilePath, args, {
    shell: true, // 如果你在 Windows 上并且需要 shell 特性,可以设置为 true
    stdio: ['ignore', 'pipe', 'pipe'] // 忽略输入,将 stdout 和 stderr 管道化
});

child.stdout.on('data', (data) => {
    console.log(`stdout: ${data}`);
});

child.stderr.on('data', (data) => {
    console.error(`stderr: ${data}`);
});

child.on('close', (code) => {
    console.log(`child process exited with code ${code}`);
});

在这个例子中,spawn 函数用于创建一个新的子进程来执行 script.bat,并传递两个参数 arg1arg2。通过监听 stdoutstderr 事件,你可以捕获并处理 .bat 文件的输出和错误。最后,通过监听 close 事件,你可以知道子进程何时退出以及其退出码。

回到顶部