如何使用 Nodejs 调用需要输入参数的 bat 文件
如何使用 Nodejs 调用需要输入参数的 bat 文件
例如我有一个这样的bat
文件:
set /p a=请输入 a:
pause
set /p b=请输入 b:
echo %a% %b%
在nodejs
里我尝试了exec
,execFile
,spawn
,readline
也安装过第三方包execa。
都是只能输出,不能操作,遇到pause
就会停止,应该怎么做才可以跳过pause
并且输入参数?
感谢大神们。
手动顶一下,没有大神了吗?
例如我有一个这样的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) => {<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) => {<br> console.log(`end 事件${data}`)<br>});<br>subprocess.stdout.on('close', (data) => {<br> console.log(`close 事件${data}`)<br>});<br>subprocess.stdout.on('error', (data) => {<br> console.log(`error 事件${data}`)<br>});<br><br>
遇到pause
就会停止,应该怎么做才可以跳过pause
?
感谢大神们。
在 Node.js 中调用带有输入参数的 .bat
文件,你可以使用 child_process
模块。这个模块提供了多种方法来创建子进程,例如 exec
、execFile
、spawn
和 fork
。对于调用 .bat
文件,通常使用 spawn
或 execFile
会更合适,因为它们允许直接传递参数。
下面是一个使用 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
,并传递两个参数 arg1
和 arg2
。通过监听 stdout
和 stderr
事件,你可以捕获并处理 .bat
文件的输出和错误。最后,通过监听 close
事件,你可以知道子进程何时退出以及其退出码。