Можно использовать %~d0
для ссылки на диск командного файла, если командный файл хранится на носителе, подключенном через USB к компьютеру.
Но если командный файл хранится на другой носитель данных, такой как локальный жесткий диск внутри P C, следующие небольшие пакетные файлы демонстрируют, как получить букву диска USB-накопителя через имя тома.
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "DriveUSB="
set "VolumeName=NameOfVolume"
:GetDriveLetter
for /F "tokens=2 delims==" %%I in ('%SystemRoot%\System32\wbem\wmic.exe LOGICALDISK where VolumeName^="%VolumeName%" GET DeviceID /VALUE 2^>nul') do set "DriveUSB=%%I"
if not defined DriveUSB (
echo Device with name %VolumeName% not found.
echo/
%SystemRoot%\System32\choice.exe /C YN /N /M "Retry (Y/N):"
if errorlevel 2 goto :EOF
goto GetDriveLetter
)
echo Drive letter of %VolumeName% is: %DriveUSB%
rem More commands using environment variable DriveUSB.
echo/
pause
endlocal
NameOfVolume
должно быть адаптировано к настоящему имени тома. Эта строка интерпретируется без учета регистра WMI C.
Пожалуйста, прочтите документацию Microsoft для Win32_LogicalDisk class и его свойств для получения дополнительной информации об используемом классе.
Идентификация устройства также может быть выполнена с использованием VolumeSerialNumber
вместо VolumeName
, которое сложнее изменить, чем имя тома без форматирования тома. Запустите в окне командной строки следующую команду, чтобы отобразить серийный номер тома:
wmic LOGICALDISK where VolumeName="NameOfVolume" GET VolumeSerialNumber
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки , выполните там следующие команды, и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
choice /?
echo /?
endlocal /?
for /?
goto /?
if /?
pause /?
rem /?
setlocal /?
wmic /?
wmic logicaldisk /?
wmic logicaldisk get /?
Прочтите документацию Microsoft о Использование операторов перенаправления команд для объяснения 2>nul
. Оператор перенаправления >
должен быть экранирован символом вставки ^
в командной строке FOR , чтобы интерпретироваться как буквальный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR который выполняет встроенную командную строку wmic
в отдельном командном процессе, запущенном в фоновом режиме с %ComSpec% /c
и командной строкой в '
, добавленной в качестве дополнительных аргументов. Это также причина, по которой =
необходимо экранировать с помощью ^
, чтобы интерпретировать как буквальный символ, а не как разделитель аргументов, который в противном случае был бы заменен символом пробела экземпляром командного процессора, обрабатывающим пакетный файл, создавая предложение where
недопустимо для wmic
, выполняемого фоновым командным процессом.
Рекомендуется также прочитать топи форума DosTips c: ECHO. НЕ ОТКАЗЫВАЕТСЯ ввести текст или пустую строку - вместо этого используйте ECHO /