2

Это мой цикл для обнаружения 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 ГБ или внешние диски NTFS 500 МБ 1 ТБ и т.д.)

Я думаю, что проблема относится к "DRIVETYPE"

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

Пример: USB-накопители FAT32, 32 ГБ, отображают их как фиксированный диск (не как съемный диск) с:

wmic logicaldisk get description,name

ТАК: Win 7/8/8.1/10

Как сделать так, чтобы петля обнаруживала все USB-накопители? Спасибо

1 ответ1

1

Ваш код не может работать, потому что вы устанавливаете setlocal, поэтому никакие переменные не переживают пакет. С другой стороны, вы не используете разделители или токены, по умолчанию delims= это пробел и tokens=1 . Если вы установите в качестве последней строки set 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

EDIT добавил эхо, чтобы показать собранные USB-накопители.

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

НТН

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .