Я удивлен% ~ d0 не работает, но ваш пакетный файл работает.
Если вы можете назначить уникальную метку тома для вашего USB-устройства, то вы можете попробовать следующее:
for /f %%D in ('wmic volume get driveLetter^, label ^| find "yourLabel"') do set drive=%%D
РЕДАКТИРОВАТЬ после прочтения комментария - ОК,% ~ d0 не должен работать, потому что он просто даст букву диска, на котором находится ваш файл bat - ваш жесткий диск.
Я все еще думаю, что WMIC - это утилита, которая вам понадобится. Если вы ищете конкретное устройство, то я думаю, что мой оригинальный ответ может сработать. Другая возможность - заменить serialNumber меткой в команде wmic. Подключите ваше устройство, определите, какая буква диска используется вручную, а затем введите wmic volume get driveLetter, serialNumber
в командной строке, чтобы определить, какой серийный номер вы ищете. Тогда вы можете использовать следующее в вашем пакетном файле
for /f %%D in ('wmic volume get driveLetter^, serialNumber ^| find "yourSerialNumber"') do set drive=%%D
Другой возможностью может быть размещение вашего командного файла на USB-устройстве. Если вы можете настроить автозапуск для запуска командного файла с вашего устройства, то вы можете использовать %~d0
, чтобы получить назначенную букву диска.