本文地址: 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显示系统盘符的更多相关文章

  1. windows平台 - 0基础学习node.js(一)

    首先得明白node.js做什么用的: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Nod ...

  2. $ npm install opencv ? 你试试?! 在windows环境下,使用node.js调用opencv攻略

    博主之前写过一篇文章<html5与EmguCV前后端实现——人脸识别篇>,叙述的是opencv和C#的故事.最近在公司服务器上更新了一套nodejs环境,早就听闻npm上有opencv模块 ...

  3. windows 10 下配置安装node.js

      环境配置 node.js windows10 25.5k 次阅读  ·  读完需要 6 分钟 5 在去年就自己配置安装过node.js,但是使用npm安装模块时安装成功后调用require('mo ...

  4. MongoDB学习总结(一) —— Windows平台下安装

    > 基本概念 MongoDB是一个基于分布式文件存储的开源数据库系统,皆在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB将数据存储为一个文档,数据结构由键值key=>val ...

  5. Django 1.6在Windows平台下的配置

    Django 1.6 在Windows平台下的配置 前言 最近两天研究了下Django1.6在Windows平台中的配置安装,服务器采用Apache.期间遇到过许多新手所遇到的各种问题,也算是一种宝贵 ...

  6. 在Windows平台下安装与配置Memcached及C#使用方法

    1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ...

  7. Windows平台下源码分析工具

    最近这段时间在阅读 RTKLIB的源代码,目前是将 pntpos.c文件的部分看完了,准备写一份文档记录下这些代码的用处.处理过程.理论公式来源.注意事项,自己还没有弄明白的地方.目前的想法是把每一个 ...

  8. Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  9. windows平台下基于VisualStudio的Clang安装和配置

    LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...

随机推荐

  1. 点击之后上传图片到页面 input type="file" 样式

    <!DOCTYPE html><head> <meta http-equiv="Content-Type" content="text/ht ...

  2. MongoDB经典入门(2)--shell命令

    MongoDB是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境. 使用 "./mongo --help" 可查看相关连接 ...

  3. jQuery中Ajax的几种写法

    1.   $.post(url,params,callback); 采用post方式提交,中文参数无需转码,在callback中如果要获取json字符串,还需转换一下. 2.  $.getJSON(u ...

  4. SQL增删改

    USE sqlxx CREATE TABLE ygb( sid INT, sname VARCHAR(20), sgender VARCHAR(2), sbirthday DATE, semail V ...

  5. Linux下mysql 忘记密码的解决办法

    >mysql -u root -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \ ...

  6. 【Codeforces 469B】Chat Online

    [链接] 我是链接,点我呀:) [题意] [题解] 因为你的朋友的时间是固定的. 你完全可以开一个tag[50]的数组,如果tag[i]=1说明i时刻你的基友在线(扫描基友的时间就能 得到 然后你在判 ...

  7. RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第二篇【原理】

    http://blog.csdn.net/deadgrape/article/details/50574459 接着上一篇,我们开始聊聊APPIUM的框架和运行模式.废话不多说直接上图. 1.首先自动 ...

  8. OpenFace Docker 使用简介

    在Docker中使用openface最大的问题是数据与主机的交互,下面我介绍几种方法来实现主机与Docker容器的数据交互. 1.第一种也是最方便的一种方法是在进入容器时使用-v参数将主机的目录挂载到 ...

  9. 【WaaCaa】一款开源科学作图/数据可视化工具 —— 诞生篇

    作为一个理工男.用过了形形色色能够用于科学作图/数据可视化软件:从大学时做实验课推荐用于分析简单採集数据的 Origin; 毕业论文时用来呈现实验时序信号和离线分析脑电信号的 MATLAB.后面还发现 ...

  10. Unity3D中C#和JS的方法互相調用

    因为Unity3D中一些腳本的方法仅仅能用在JS中.在C#中是無效的,而C#能够與服務器端通訊,JS本身卻不行.所以勢必會遇到這兩種語言腳本中方法的互相調用,下面是演示样例. 兩個文件 test1.j ...