Я бы посоветовал вам попробовать что-то вроде этого, он не гарантирует только поиск портативных USB-устройств, но ближе к тому, что принимает DriveType=2
:
@Echo Off
For /F Delims^=^= %%A In ('Set _ 2^>Nul')Do Set "%%A="
For /F Delims^= %%A In ('WMIC DiskDrive Where "InterfaceType='USB'" Assoc^
/AssocClass:Win32_DiskDriveToDiskPartition 2^>Nul^|Find /I "_DiskPartition."'
)Do For /F Tokens^=2Delims^=^" %%B In ("%%A"
)Do For /F Tokens^=4Delims^=^" %%C In ('WMIC Path Win32_LogicalDiskToPartition^
^|FindStr/C:"%%B" 2^>Nul')Do (For /F "Skip=1 Delims=" %%D In ('WMIC^
LogicalDisk Where "DeviceID='%%C'" Get DeviceID^,VolumeName')Do Echo( %%D
Call Set "_C=%%_C%%%%C")
If Not Defined _C Echo( You don't have a USB drive connected&&GoTo :EndIt
If "%_C:~,2%"=="%_C%" GoTo Picked
Echo( Enter the USB drive letter from the above [%_C::=%]:
For /F "Tokens=2Delims=?" %%A In ('Choice/C %_C::=%')Do Set "_L=%%A:"
:Picked
If Not Defined _L (Call:Tasks %_C%)Else Call:Tasks %_L%
:EndIt
>Nul Timeout 5
Exit/B
:Tasks
Copy /Y "FileName.sam" %1:\ >Nul 2>&1
Имеется добавленная «функция», которая заключается в том, что при наличии нескольких обнаруженных дисков вам будет предложена возможность выбора между ними для пункта назначения.
Я создал это таким образом, что вам не нужно ничего трогать в этом скрипте, кроме задачи (ей) под нижней меткой, где %1
- это ваша обнаруженная буква диска. В этом случае вы, вероятно, захотите изменить строку в двойных кавычках в последней строке.