2013-04-08 54 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:"]