2012-09-27 50 views
6

我想使用nodejs獲取windows中的分區列表。 fs.readdir可以正常工作,適用於任何下面的文件夾或包含C:的文件夾,但是我不知道應該如何讓分區列表包含「C:」,「D:」等等。nodejs中的列表分區

任何人都知道我應該使用什麼?

回答

8

node.js中沒有api列出分區。一種解決方法是使用child_process並執行wmic命令(或任何可以列出分區的命令)。

var spawn = require('child_process').spawn, 
    list = spawn('cmd'); 

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

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

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

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

它的工作,感謝一噸! – user1703467

3

我的2美分: - :如果匹配你尋找什麼

/** 
* Get windows drives 
* */ 
function get_win_drives(success_cb,error_cb){ 
    var stdout = ''; 
    var spawn = require('child_process').spawn, 
      list = spawn('cmd'); 

    list.stdout.on('data', function (data) { 
     stdout += data; 
    }); 

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

    list.on('exit', function (code) { 
     if (code == 0) { 
      console.log(stdout); 
      var data = stdout.split('\r\n'); 
      data = data.splice(4,data.length - 7); 
      data = data.map(Function.prototype.call, String.prototype.trim); 
      success_cb(data); 
     } else { 
      console.log('child process exited with code ' + code); 
      error_cb(); 
     } 
    }); 
    list.stdin.write('wmic logicaldisk get caption\n'); 
    list.stdin.end(); 
} 
3

不知道

略微增強與回調,易於整合的功能,返回驅動器陣列但是我們構建了一個名爲drivelist的NodeJS模塊,該模塊將返回具有各自安裝點的連接驅動器陣列(例如:Windows中的掛載字母):

[ 
    { 
     device: '\\\\.\\PHYSICALDRIVE0', 
     description: 'WDC WD10JPVX-75JC3T0', 
     size: '1000 GB' 
     mountpoint: 'C:', 
     system: true 
    }, 
    { 
     device: '\\\\.\\PHYSICALDRIVE1', 
     description: 'Generic STORAGE DEVICE USB Device', 
     size: '15 GB' 
     mountpoint: 'D:', 
     system: false 
    } 
] 

不可移動驅動器被標記爲system: false,您可以通過該屬性進行過濾,如果這是您正在尋找的。

該模塊的主要優勢在於它適用於所有主流操作系統。

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

0

一點點簡單的實現:

const exec = require('child_process').exec; 
exec('wmic logicaldisk get name', (error, stdout, stderr) => { 
    if (error) { 
    console.error(`exec error: ${error}`); 
    return; 
    } 
    console.log('stdout ', stdout); 
    console.log('stderr ', stderr); 
});