阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js child_process 在 Windows 上衍生 .bat 和 .cmd 文件

      Node.js child_process 在 Windows 上衍生 .bat 和 .cmd 文件

      child_process.exec() 和 child_process.execFile() 之间的重要区别可能因平台而异。 在 Unix 类型的操作系统(Unix、Linux、macOS)上,child_process.execFile() 可以更高效,因为默认情况下它不会衍生 shell。 但是在 Windows 上, .bat 和 .cmd 文件在没有终端的情况下不能自行执行,因此无法使用 child_process.execFile() 启动。 在 Windows 上运行时,可以使用带有 shell 选项集的 child_process.spawn()、或使用 child_process.exec() 或通过衍生 cmd.exe 并将 .bat 或 .cmd 文件作为参数传入(也就是 shell 选项和 child_process.exec() 所做的)。 在任何情况下,如果脚本文件名包含空格,则需要加上引号。

      // 仅限 Windows 系统。
      const { spawn } = require('child_process');
      const bat = spawn('cmd.exe', ['/c', 'my.bat']);
      
      bat.stdout.on('data', (data) => {
        console.log(data.toString());
      });
      
      bat.stderr.on('data', (data) => {
        console.log(data.toString());
      });
      
      bat.on('exit', (code) => {
        console.log(`子进程退出码:${code}`);
      });
      
      // 或:
      const { exec } = require('child_process');
      exec('my.bat', (err, stdout, stderr) => {
        if (err) {
          console.error(err);
          return;
        }
        console.log(stdout);
      });
      
      // 文件名中包含空格的脚本:
      const bat = spawn('"my script.cmd"', ['a', 'b'], { shell: true });
      // 或:
      exec('"my script.cmd" a b', (err, stdout, stderr) => {
        // ...
      });
      

      更多内容请参考:Node.js child_process 子进程,或者通过 点击对应菜单 进行查看;


      目录
      本文目录
      目录