V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
asdjgfr
V2EX  ›  Node.js

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

  •  
  •   asdjgfr · 2019-08-09 16:25:22 +08:00 · 4174 次点击
    这是一个创建于 1714 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    2 条回复    2019-08-13 13:53:46 +08:00
    yangg
        1
    yangg  
       2019-08-09 16:38:13 +08:00
    asdjgfr
        2
    asdjgfr  
    OP
       2019-08-13 13:53:46 +08:00
    手动顶一下,没有大神了吗?

    例如我有一个这样的`bat`文件:
    ```shell
    set /p a=请输入 a:
    pause
    set /p b=请输入 b:
    echo %a% %b%
    ```
    在`nodejs`里安装了第三方包[execa]( https://github.com/sindresorhus/execa#readme)。
    ```javascript
    const execa = require('execa');
    const path = require('path');
    const fs = require('fs');

    const testPath = path.join(__dirname, './test');

    const subprocess = execa(path.join(DeepFaceLab, "test.bat"), [], {
    cwd: testPath
    });

    subprocess.stdout.on('data', (data) => {
    console.log(`输出:${data}`)
    if (/a/ig.test(data)) {
    subprocess.stdin.write('1');
    //执行到这里就卡住了
    //subprocess.stdin.end()
    } else if ((/b/ig.test(data))) {
    console.log('image')
    subprocess.stdin.write('jpg');
    //subprocess.stdin.end()
    }
    });

    subprocess.stdout.on('end', (data) => {
    console.log(`end 事件${data}`)
    });
    subprocess.stdout.on('close', (data) => {
    console.log(`close 事件${data}`)
    });
    subprocess.stdout.on('error', (data) => {
    console.log(`error 事件${data}`)
    });

    ```
    遇到`pause`就会停止,应该怎么做才可以跳过`pause`?
    感谢大神们。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1324 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:38 · PVG 07:38 · LAX 16:38 · JFK 19:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.