循环检测 USB 驱动器存储

循环检测 USB 驱动器存储

这是我检测 USB 驱动器存储的循环:

setlocal enabledelayedexpansion
REM get removable loaded drives:
for /f %%a in ('"wmic logicaldisk where (drivetype=2 and size is not null) get caption,size 2>nul|find ":""') do set usb=!usb! %%a

检测大多数 USB 驱动器存储。但有些无法检测(fat32 大于 16 GB 或外部驱动器 NTFS 500mb 1 tb 等)

我认为问题与“DRIVETYPE”有关

Value   Meaning
  0     Unknown
  1     No root directory
  2     Removable disk
  3     Local disk
  4     Network drive
  5     Compact disk
  6     RAM disk

示例:fat32 usb 设备 32GB 存储,将其列为固定磁盘(而不是可移动磁盘),其中:

wmic logicaldisk get description,name

因此:Win 7/8/8.1/10

如何让循环检测所有 USB 存储设备?谢谢

答案1

由于您正在设置 setlocal,因此您的代码无法工作,因此批处理中没有变量。另一方面,您不使用分隔符或标记,默认情况下delims=是空格和tokens=1。如果您将 aset usb作为最后一行,您将只获得Usb= E:(带有前导空格)。由于可能的驱动器不多,我将通过批处理进行过滤并使用更简单的wmic logicaldisk list brief

使用哪些令牌由您决定。

@Echo off
setlocal enabledelayedexpansion
Set "USB="
REM get removable loaded drives:
for /f "tokens=1-5" %%a in (
 'wmic logicaldisk list brief'
) do if %%b Equ 2 if %%d gtr 0 Set USB=!USB! %%a
Echo:Usb removable drives:%USB%
EndLocal&Set USB=%USB:~1%&Goto :Eof

编辑添加了 Echo 来显示收集的 USB 驱动器。

> Get-UsbDrives.cmd
Usb removable drives:  E:

高血压

相关内容