【问题标题】:How can I get drive letter by searching USB name using Windows command or Node.js/Electron?如何通过使用 Windows 命令或 Node.js/Electron 搜索 USB 名称来获取驱动器号?
【发布时间】:2020-11-26 06:42:47
【问题描述】:

我想在后台将内容下载到U盘上。所以我需要找到它的位置。有没有用windows命令实现的功能?

或者有没有使用Node.js/Electron查找U盘的功能?

如果可能的话,如何区分两个同名的 USB 驱动器?

【问题讨论】:

  • MS-DOScmd(Windows 命令行)? wmic logicaldisk where VolumeName="MyStick" get DeviceID.
  • 谢谢!有用。但是找到的信息太长了。有什么办法让它只返回驱动器号?@Stephan
  • 使用带有适当标记和分隔符的for /f 循环。 StackOverflow 上有很多示例。

标签: node.js windows cmd electron


【解决方案1】:

如果批处理文件存储在通过USB连接到计算机的存储介质上,则可以使用%~d0引用批处理文件的驱动器。

但是如果批处理文件存储在不同的存储介质上,例如PC内部的本地硬盘,下面的小批处理文件演示了如何通过其卷名获取USB存储介质的驱动器号。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "DriveUSB="
set "VolumeName=NameOfVolume"
:GetDriveLetter
for /F "tokens=2 delims==" %%I in ('%SystemRoot%\System32\wbem\wmic.exe LOGICALDISK where VolumeName^="%VolumeName%" GET DeviceID /VALUE 2^>nul') do set "DriveUSB=%%I"
if not defined DriveUSB (
    echo Device with name %VolumeName% not found.
    echo/
    %SystemRoot%\System32\choice.exe /C YN /N /M "Retry (Y/N):"
    if errorlevel 2 goto :EOF
    goto GetDriveLetter
)
echo Drive letter of %VolumeName% is: %DriveUSB%
rem More commands using environment variable DriveUSB.
echo/
pause
endlocal

NameOfVolume 必须适应真实的卷名。 WMIC 解释此字符串不区分大小写。

请阅读有关Win32_LogicalDisk class 及其属性的 Microsoft 文档,以了解有关使用的类的更多信息。

设备识别也可以通过使用VolumeSerialNumber 而不是VolumeName 来完成,这比在不格式化卷的情况下更改卷名更难。在命令提示符窗口中运行以下命令以显示卷序列号:

wmic LOGICALDISK where VolumeName="NameOfVolume" GET VolumeSerialNumber

要了解所使用的命令及其工作原理,请打开command prompt 窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • choice /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • rem /?
  • setlocal /?
  • wmic /?
  • wmic logicaldisk /?
  • wmic logicaldisk get /?

阅读有关Using command redirection operators 的Microsoft 文档,了解2>nul 的解释。当 Windows 命令解释器在执行命令 FOR 在后台启动的单独命令进程中执行嵌入的wmic 命令行,%ComSpec% /c' 中的命令行作为附加参数附加。这也是为什么必须使用 ^ 转义 = 以将其解释为文字字符而不是作为参数分隔符的原因,否则该参数分隔符将由处理批处理文件的命令处理器实例替换为空格字符,从而生成 where 子句对后台命令进程执行的wmic无效。

推荐阅读DosTips论坛主题:ECHO. FAILS to give text or blank line - Instead use ECHO/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多