专栏首页游戏杂谈windows下node.js调用bat

windows下node.js调用bat

node.js调用bat需要用到Child Processes模块

因为bat是文件,所以需要使用execFile方法

如果指定了cwd,它会切换bat执行的目录,类似cd的功能,如果未指定默认为当前调用程序的目录。如果bat有输出错误,例如创建指定的文件/目录已经存在时,会返回一个错误信息时,调用bat会得到一个相关的错误信息:Error {killed: false, code: 1, signal: null}

process.execFile(url, [1, 2], {cwd:'D:/'}, function(error, stdout, stderr) {
    console.log(error);
    console.log(stdout);
    alert(1);
});

如果只指定了盘符,而非一个可访问的路径时,会得到Error: spawn EBADF

process.execFile(url, [1, 2], {cwd:'D'}, function(error, stdout, stderr) {
    console.log(error);
    console.log(stdout);
    alert(1);
});

输出:Error {code: "EBADF", errno: "EBADF", syscall: "spawn"}

二种方式可以得到调用bat的返回结果,一种是直接回调函数里获取stdout的值,还有一种是监听子进程的data事件

var child_proc = process.execFile(url, [1, 2], {cwd:dirName}, function(error, stdout, stderr) {
    console.log(error);
    console.log(stdout);
});

child_proc.stdout.on('data', function(data) {
  console.log(data);
});

假设bat的文件内容是创建三个目录,其中二个目录是通过参数传递进去的(上面代码中的数组[1, 2],其中1、2就是参数)

@echo off

echo hahaniu~~~

mkdir %1
mkdir %2
mkdir aa

执行上面的代码后,会在指定的目录下(也就是代码中cwd参数的值)创建相应的目录,其中stdout将得到“hahaniu~~~”的输出

除了execFile方法外,还有exec方法亦能达到目的。用exec分解调用的文件功能,如下面的示例(创建一个目录)

process.exec("mkdir " + (new Date().getTime()), function(error, stdout, stderr) {
    
});

如果node.js想查询注册表或者其它信息,可以直接像在dos下输入命令一下,例如查询winrar安装目录

process.exec("reg query HKEY_CLASSES_ROOT\\WinRAR\\shell\\open\\command /ve", function(error, stdout, stderr) {
    var path = stdout.match(/(\"[^\"]+\")/)[1]

    console.log(path);
});

自此,以前用hta的工具都可以用node-webkit替代了

【参考资料】

http://nodejs.org/api/child_process.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • command line subversion for windows

    安装 Slik SVN 之后,进入dos, 输入svn help,所有的命令和相关的信息都出来了

    meteoric
  • 移动环境下DNS解析失败后的优化方案

    我们手机游戏中,通过上报收集到的数据来分析,发现相当多的一部分用户,在请求一些配置时会遇到无法解析的情况,或者域名的解析直接被拦截了。

    meteoric
  • u3d不显示阴影的处理方法

    meteoric
  • Fluentd输出插件:out_stdout用法详解

    如果Fluentd以daemon方式在后台运行,out_stdout会将事件输出到Fluentd的运行日志中。

    Fluentd中文网
  • 【干货】最新深度学习课程,多伦多大学“神经网络与机器学习导论(2018年Spring)(附课件下载)

    【导读】多伦多大学计算机系助理教授Roger Grosse 开设的《神经网络与机器学习导论》课程涵盖了从机器学习基础知识到深度学习、强化学习等高阶内容,是AI从...

    WZEARW
  • 实习第六周

    https://stackoverflow.com/questions/11872832/how-to-respond-to-clicks-on-a-check...

    治电小白菜
  • 海量数据迁移之外部表加载(100天)

    本地有一个小的环境,今天照例登上sqlplus,突然发现报了如下的错误。一看原来归档满了。我记得前几天做一个批量操作临时把temp文件resize了很大,限于本...

    jeanron100
  • 归档问题导致的数据库无法启动 (80天)

    本地有一个小的环境,今天照例登上sqlplus,突然发现报了如下的错误。一看原来归档满了。我记得前几天做一个批量操作临时把temp文件resize了很大,限于本...

    jeanron100
  • js得到当前页面的url信息

    所有的代码都是可用,而且附了图片的,不过是直接用我自己的文章地址,所以有些显示的有点奇怪。

    ydymz
  • 用什么语言的程序员最抢手?招聘网站数据告诉你,Python都没进前五

    昨天,美国程序员招聘网站Hired发布的《2019软件工程师状态》报告中指出,基于市场供需来说,Go语言使用者目前最受招聘市场欢迎。

    量子位

扫码关注云+社区

领取腾讯云代金券