【问题标题】:Detect All Top-Level Directories [duplicate]检测所有顶级目录[重复]
【发布时间】:2020-04-08 11:29:54
【问题描述】:

鉴于This PC 似乎无法访问,我想做的是在 Windows 上检测所有顶级目录(即C:\A:\X:\ 等) .

以下代码可以工作,但显然不理想并且有很多缺点。例如,我认为命名空间不会被限制在AZ,这样的方法会产生很大的问题。

const
  fs = require('fs'),
  ab = 'abcdefghijklmnopqrstuvwxyz'.split('')

ab.forEach(v => fs.existsSync(`${v}:\\`))

有人知道其他方法吗?

【问题讨论】:

  • 谷歌给我this package
  • npmjs.com/package/drivelist - 与操作系统无关
  • @KenY-N 谢谢我检查一下。
  • @KenY-N - google 包在 child_process 中执行 wmic logicaldisk get caption 并使用这些结果。
  • @JaromandaX - npmjs.com/package/drivelist 通过本机代码支持多种操作系统,因此需要编译。它似乎支持 mac、windows 和 linux。它支持多种操作系统,而不是与操作系统无关。

标签: javascript node.js windows filesystems fs


【解决方案1】:

如果您可以使用 child_process,您可以这样做:

const child = require('child_process');

child.exec('wmic logicaldisk get name', (error, stdout) => {
    const drives = stdout.split('\r\r\n')
        .filter(value => /[A-Za-z]:/.test(value))
        .map(value => value.trim())

    //do stuff with drives
});

drives 将是一组可用驱动器,例如 ['C:', ...]

【讨论】:

  • 我会调查的。使用child_process 是否会引入漏洞,或者为什么我不能使用它?
  • 只要你这样使用它就没有真正的缺点。要记住的主要事情是,您不想在使用它时允许命令注入。在这种情况下,我们已经对命令进行了硬编码,因此无法以任何方式利用它。
  • 好酷。我应该有一些空闲时间在一周内测试所有内容。生病让你知道情况如何。再次感谢
  • 漂亮。它在cmd中吐出的所有其他信息是什么?另外,看看我是否理解发生了什么,它基本上打开了一个 shell 来执行 OS 命令,然后返回任何内容,对吗?
  • 对我来说标准输出只是Name\nC:\nD:\nE:。是的,它使用 shell 生成一个子进程并在该 shell 中执行提供的命令,然后将输出作为 stdout 管道返回 :)
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2018-02-12
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
相关资源
最近更新 更多