这是我检测 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:
高血压