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 条评论
登录 后参与评论

相关文章

来自专栏Seebug漏洞平台

D-Link DIR-605L 拒绝服务错误报告 (CVE-2017-9675)

原文:http://hypercrux.com/bug-report/2017/06/19/DIR605L-DoS-BugReport/ 译者:Serene ...

3916
来自专栏前端那些事

Express4.x API (三):Response (译)

Express4.x API 译文 系列文章 技术库更迭较快,很难使译文和官方的API保持同步,更何况更多的大神看英文和中文一样的流畅,不会花时间去翻译--,所...

17810
来自专栏阿杜的世界

Redis学习札记

Redis支持两种持久化方式,一种是RDB方式(快照:根据指定的规则“定时”将内存中的数据存储在硬盘上),另一种是AOF方式(在每次执行命令后都将命令本身记录下...

1313
来自专栏Android群英传

看ASM在代码中的强势插入

4403
来自专栏码农阿宇

Asp.net Core 2.1新功能Generic Host(通用主机)深度学习

这是在Asp.Net Core 2.1加入了一种新的Host,现在2.1版本的Asp.Net Core中,有了两种可用的Host。

1261
来自专栏用户2442861的专栏

2015百度一道面试题引发的思考(shell脚本和网络)

原文    http://blog.csdn.net/chhuach2005/article/details/40044863

1213
来自专栏技术小黑屋

Error-prone,Google出品的Java和Android Bug分析利器

Error-prone是基于BugPattern来发现问题的,覆盖范围不仅限于Java还包含Android代码。一些比较常见的BugPattern有如下这些

4402
来自专栏java技术学习之道

Java日志框架:logback详解

3735
来自专栏信安之路

ring3层恶意代码实例汇总

之前一期我们学习了 IAT 的基本结构,相信大家对 C++ 有了一个基本的认识,这一期放点干货,我把 ring3 层恶意代码常用的编程技术给大家整理了一下,所有...

1450
来自专栏菩提树下的杨过

rpc框架之 thrift 学习 1 - 安装 及 hello world

thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:htt...

3619

扫码关注云+社区

领取腾讯云代金券