【发布时间】:2013-03-30 12:39:10
【问题描述】:
有没有办法检索计算机上所有逻辑驱动器的驱动器名称?
我查看了 fs api,但从那里我只能枚举给定目录的文件和目录。
【问题讨论】:
-
您的目标是哪个系统?解决方案是否需要跨平台工作,还是可以针对特定平台?
-
我的目标是windows,不需要跨平台
有没有办法检索计算机上所有逻辑驱动器的驱动器名称?
我查看了 fs api,但从那里我只能枚举给定目录的文件和目录。
【问题讨论】:
使用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)
})
【讨论】:
/Volumes/ 目录,在 linux 上您可以查看 /mnt,但 Windows 没有为您提供已安装驱动器的目录。另请注意computerhope.com/issues/ch000854.htm#2 和 wmic logicaldisk get name
我不确定您所说的“驱动器名称”是什么意思。如果您指的是\\.\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'
}
]
【讨论】:
npm install drivelist 期间未能构建,只需安装此库的旧版本。
This version of Node.js requires NODE_MODULE_VERSION 75。知道该怎么做吗?我已经尝试过重建和重新安装
如果你的目标是 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:"]
【讨论】:
基于Edwin Lees 的回答:
const child = require('child_process');
child.exec('wmic logicaldisk get name', (error, stdout) => {
console.log(
stdout.split('\r\r\n')
.filter(value => /[A-Za-z]:/.test(value))
.map(value => value.trim())
);
});
输出:['C:', 'D:'] 等
【讨论】:
@Bagherani 的降级建议 +1!
我使用的是 Electron React Boilerplate v4.0,无法加载驱动列表。我降级到 drivelist@5.2.12,它可以满足我的需求。
【讨论】: