Windows平台下如何使用node.js显示系统盘符
本文地址: http://www.cnblogs.com/blackmanba/articles/windows-nodejs-show-system-letter.html或者http://forkme.info/windows-nodejs-show-system-letter/, 转载请注明源地址。
1. 概述
node.js上大部分的API说明使用的例子都是基于Linux或者Mac os系统, 对Windows系统叙述比较少(当然, 因为node.js兼容所有平台, 所以这一点其实也无伤大雅)。但是, 如果应用涉及到调用系统命令行来完成一些功能, 兼容Windows就会是比较痛苦的一件事了, 最近就遇到了这么一个问题, 在Windows平台上怎么显示系统盘符呢?这个问题如果在Linux系统和Mac os 系统下是很容易解决的, 直接使用node.js调用cd / | ls -al命令显示就可以了, 但是在Windows平台上这个问题讨论得就比较少了。下面就来说说这个问题在Windows平台下的解决方式。
2. 策略
2.1. 思路
解决Windows下用node.js显示系统盘符这个问题的方法其实和在Linux和Mac os下显示根目录文件的方法是一致的。那就是使用node.js直接调用系统命令, 不同的只是不同平台之间命令不一致罢了。node.js已经为我们提供了调用系统命令的API, 那就是child_process模块。
2.2. Windows平台命令
那么, Windows平台使用什么命令来显示系统盘符呢?答案是使用wmic命令。为了显示系统盘符, 我们采用以下命令:
wmic logicaldisk get caption
输出情况如下:

3. 实现
以下是使用node.js显示Windows平台下盘符的代码:
var exec = require('child_process').exec;
// show Windows letter
function showLetter(callback) {
exec('wmic logicaldisk get caption', function(err, stdout, stderr) {
if(err || stderr) {
console.log("root path open failed" + err + stderr);
return;
}
callback(stdout);
}
}
/**
* output:
* Caption
* C:
* D:
* E:
* F:
* G:
**/
如果你使用的Windows 7系统, 恭喜你, 代码已经能够正确运行并输出你所想要的结果。但如果你使用的是Windows xp系统, 那么就会发现一个问题, 那就是代码没有产生任何输出, 并且也没有报任何错误。o(╯□╰)o
4. Windows xp兼容问题
其实这个问题出现的主要原因就是因为wmic命令事实上是一个交互式命令, 在Windows xp下其实也能正确的执行并产生对应的输出, 不同的是在Windows xp下命令行还在等待与用户的交互, 所以没有产生任何输出。也就是说我们其实还需要自己输入ctrl+c命令来结束这个命令。
这种解决方法最大的缺点就是我们必须自己通过键盘输入来停止与命令的交互。那有没有不用让用户进行直接操控, 执行完命令就自动退出的方法呢?答案是有的。那就是使用node.js exec方法返回的Child Process对象, 调用end方法停止与用户的交互, 同时监听对象的close事件来处理返回的信息。示例代码如下:
var exec = require('child_process').exec;
// show Windows letter, to compatible Windows xp
function showLetter(callback) {
var wmicResult;
var command = exec('wmic logicaldisk get caption', function(err, stdout, stderr) {
if(err || stderr) {
console.log("root path open failed" + err + stderr);
return;
}
wmicResult = stdout;
});
command.stdin.end(); // stop the input pipe, in order to run in windows xp
command.on('close', function(code) {
console.log("wmic close:: code:" + code);
var data = wmicResult.split('\n'), result = {};
callback(result);
});
}
/**
* output:
* Caption
* C:
* D:
* E:
* F:
* G:
**/
5. 总结
本文通过使用Windows系统下的wmic命令解决显示系统盘符这个问题, 并且同时解决了Windows xp下的兼容性问题。
Windows平台下如何使用node.js显示系统盘符的更多相关文章
- windows平台 - 0基础学习node.js(一)
首先得明白node.js做什么用的: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Nod ...
- $ npm install opencv ? 你试试?! 在windows环境下,使用node.js调用opencv攻略
博主之前写过一篇文章<html5与EmguCV前后端实现——人脸识别篇>,叙述的是opencv和C#的故事.最近在公司服务器上更新了一套nodejs环境,早就听闻npm上有opencv模块 ...
- windows 10 下配置安装node.js
环境配置 node.js windows10 25.5k 次阅读 · 读完需要 6 分钟 5 在去年就自己配置安装过node.js,但是使用npm安装模块时安装成功后调用require('mo ...
- MongoDB学习总结(一) —— Windows平台下安装
> 基本概念 MongoDB是一个基于分布式文件存储的开源数据库系统,皆在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB将数据存储为一个文档,数据结构由键值key=>val ...
- Django 1.6在Windows平台下的配置
Django 1.6 在Windows平台下的配置 前言 最近两天研究了下Django1.6在Windows平台中的配置安装,服务器采用Apache.期间遇到过许多新手所遇到的各种问题,也算是一种宝贵 ...
- 在Windows平台下安装与配置Memcached及C#使用方法
1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ...
- Windows平台下源码分析工具
最近这段时间在阅读 RTKLIB的源代码,目前是将 pntpos.c文件的部分看完了,准备写一份文档记录下这些代码的用处.处理过程.理论公式来源.注意事项,自己还没有弄明白的地方.目前的想法是把每一个 ...
- Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- windows平台下基于VisualStudio的Clang安装和配置
LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...
随机推荐
- hdu1385 Minimum Transport Cost 字典序最小的最短路径 Floyd
求最短路的算法最有名的是Dijkstra.所以一般拿到题目第一反应就是使用Dijkstra算法.但是此题要求的好几对起点和终点的最短路径.所以用Floyd是最好的选择.因为其他三种最短路的算法都是单源 ...
- ANN:DNN结构演进History—LSTM_NN
前言 语音识别和动作识别(Action.Activities) 等一些时序问题,通过微分方式可以视为模式识别方法中的变长模式识别问题.语音识别的基元为音素.音节,字母和句子模式是在时间轴上的变长序列 ...
- 01--数据结构——动态链表(C++)
数据结构——动态链表(C++) 定义一个节点: [cpp] view plain copy print? #include <iostream> using namespace s ...
- 06--C语言数学函数
在使用C语言数学函数时候,应该在该源文件中使用以下命令行: #include <math.h> 或 #include "math.h",这里的<>跟&quo ...
- Win7系统下调整硬盘分区大小给C盘更多的空间
电脑安装了很多程序,C盘空间越来越小了.如何给C盘调整更多的空间,其实只要调整硬盘分区大小便可解决这个问题,下面有个小技巧,需要的朋友照做就可以了 Win7系统下如何调整硬盘分区大小,以前装系统的时候 ...
- javase 异常处理
1.简述什么是异常.异常的继承体系? 异常就是java代码块在运行时出现的错误,有编译错误和运行错误, Throwable是所有异常的父类它包含了error和Exception两个子类. 其中e ...
- 安装和启动Elasticseach
1.在windows上安装和启动Elasticseach 1.安装JDK,至少1.8.0_73以上版本,java -version2.下载和解压缩Elasticsearch安装包.Elasticsea ...
- 沃通SSL证书、代码签名证书应用于机器人安全防护
近两年,扫地机器人.智能音箱等消费级机器人产品逐渐走入大众生活的中.随着人工智能技术的迅猛发展,预计2023年全球消费级机器人市场规模将达到150亿美元.然而,产业的迅猛发展却伴随着安全防护的缺失,安 ...
- vim利器:vundle 管理器和NERDTree插件
vundle 和nerdtree vundle git: https://github.com/VundleVim/Vundle.vim.git nerdtree git : https://gith ...
- 备份/还原mysql数据库
有木有遇到过这种情况?电脑或者服务器需要重装系统?可是你电脑上存着n多个网站的数据库,怎么办?把数据库文件夹拷贝出来,重装系统之后再拷回去?如果你使用了InnoDB引擎,恐怕那样做会出麻烦的,一个一个 ...