2013-04-08 67 views
2

有没有办法检索计算机上所有逻辑驱动器的驱动器名称?枚举nodejs中的系统驱动器

我已经看过fs api,但是从那里我只能枚举给定目录的文件和目录。

+0

哪个系统,你定位?解决方案是否需要跨平台工作,还是需要平台特定? – Noah 2013-04-08 13:38:56

+0

我的目标是Windows,它不需要跨平台 – foobarcode 2013-04-08 13:53:23

回答

1

如何使用DiskPart命令?在命令行中运行diskpart list会为您提供所需的输出吗?如果是这样,你可以使用child_process.exec

var exec = require('child_process).exec 
var cmd = 'diskpart list' 
exec(cmd, function(err, stdout, stderr) { 
    if (err) { 
    console.log('error running diskpart list command') 
    console.log(err) 
    return 
    } 
    console.log('stdout data') 
    console.log(stdout) 

    console.log('stderr data') 
    console.log(stderr) 
}) 
+0

这将工作是的,但我想避免运行子进程和解析命令输出。但是,如果节点的API中没有任何东西,那可能是我会采用的...... – foobarcode 2013-04-08 14:10:46

+1

我相信这是你打算做的最好的事情。 node.js本身没有任何方法可以做到这一点。在OSX上,你可以阅读'/ Volumes /'目录,而在linux上你可以看'/ mnt',但是Windows没有为你提供安装驱动的目录。另外请注意http://www.computerhope.com/issues/ch000854.htm#2和wmic logicaldisk获取名称 – Noah 2013-04-08 14:19:56

+0

好吧我不知道这一点,感谢您的回答 – foobarcode 2013-04-08 14:32:12

8

在节点执行这个我不知道你所说的“驱动器名称”的意思。如果您在\\.\PhysicalDriveN形式意味着驱动器,我面临同样的问题,实现了这个模块,在所有主要操作系统的工作原理:

https://github.com/resin-io/drivelist

对于Windows,你得到的信息,如:

[ 
    { 
     device: '\\\\.\\PHYSICALDRIVE0', 
     description: 'WDC WD10JPVX-75JC3T0', 
     size: '1000 GB' 
    }, 
    { 
     device: '\\\\.\\PHYSICALDRIVE1', 
     description: 'Generic STORAGE DEVICE USB Device', 
     size: '15 GB' 
    } 
] 
+0

这是一个正确的跨平台解决方案!如果您仅为一个操作系统在nodejs中创建应用程序,那么您做错了! – tborychowski 2015-12-30 12:17:21

0

如果你的目标是Windows,你可以试试这个:

这个解决方案基于this post的想法。

我用承诺包装它。

var spawn = require("child_process").spawn 

function listDrives(){ 
    const list = spawn('cmd'); 

    return new Promise((resolve, reject) => { 
     list.stdout.on('data', function (data) { 
      // console.log('stdout: ' + String(data)); 
      const output = String(data) 
      const out = output.split("\r\n").map(e=>e.trim()).filter(e=>e!="") 
      if (out[0]==="Name"){ 
       resolve(out.slice(1)) 
      } 
      // console.log("stdoutput:", out) 
     }); 

     list.stderr.on('data', function (data) { 
      // console.log('stderr: ' + data); 
     }); 

     list.on('exit', function (code) { 
      console.log('child process exited with code ' + code); 
      if (code !== 0){ 
       reject(code) 
      } 
     }); 

     list.stdin.write('wmic logicaldisk get name\n'); 
     list.stdin.end(); 
    }) 
} 

listDrives().then((data) => console.log(data)) 

测试它,你会看到这样的结果:

["c:", "d:"]