Получение букв USB-накопителя из команды и использование их в качестве переменных выбора

Я пытаюсь создать пакетный файл для резервного копирования папок на USB-накопитель. В определенный момент я хочу, чтобы пакет отображал список всех доступных USB-накопителей, подключенных к компьютеру, а затем просил пользователя выбрать букву диска одного из них для продолжения.

Что касается списка: я хочу объединить эти два выхода в одну строку для каждого USB-накопителя.

логический диск wmic, где DriveType ^ = 2 получить идентификатор устройства

wmic diskdrive, где mediatype^=removable media get Caption, SerialNumber

Что касается команды выбора: как я могу использовать буквы дисков в качестве вариантов выбора для пользователя?


person Chris Evan    schedule 26.04.2021    source источник
comment
Ни псевдоним LogicalDisk с "DriveType='2'", ни псевдоним DiskDrive с "MediaType='Removable Media'" не выбирают USB-накопители. Мало того, что все USB-накопители не зарегистрированы как съемные, все съемные носители не являются USB-накопителями. Я бы посоветовал вам использовать "InterfaceType='USB'" с DiskDrive, чтобы попытаться определить соответствующую букву диска для каждого из его результатов.   -  person Compo    schedule 27.04.2021


Ответы (1)


Следующий код должен:

  1. Определите букву (буквы) вашего USB-накопителя.
  2. Если ничего не найдено, уведомите вас, а затем закройте.
  3. Если найден только один, выберите его автоматически.
  4. Если найдено несколько, предложите выбор на выбор.
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
Set "USBDrv="
For /F Tokens^=2^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe
 DiskDrive Where "InterfaceType='USB'" Assoc:List
 /AssocClass:Win32_DiskDriveToDiskPartition 2^>NUL
 ^| %SystemRoot%\System32\findstr.exe "^__R"'
) Do For /F Tokens^=4^ Delims^=^" %%H In ('%SystemRoot%\System32\wbem\WMIC.exe
 Path Win32_LogicalDiskToPartition ^| %SystemRoot%\System32\findstr.exe /C:"%%G"
 2^>Nul') Do Set "USBDrv=!USBDrv!%%H"
If Not Defined USBDrv Echo No USB drive connected.&& GoTo :EndIt
If "%USBDrv:~2%" == "" (GoTo Selected) Else Echo Which USB drive %USBDrv::=: %? 
For /F "Tokens=2 Delims=?" %%G In ('%SystemRoot%\System32\choice.exe
 /C %USBDrv::=% 2^>NUL') Do Set "USBDrv=%%G:"

:Selected
Call :Task %USBDrv%

:EndIt
%SystemRoot%\System32\timeout.exe /T 5 1>NUL 
GoTo :EOF

:Task
Rem Place your commands here [%1 will be the USB drive e.g. E:].

Все, что вам нужно сделать, это поместить свои команды резервного копирования и т. д. внизу.

person Compo    schedule 27.04.2021
comment
Спасибо большое за ваши ответы!! Мне правда очень помог!! - person Chris Evan; 27.04.2021