Наименование тома отличается от именования файлов, путей и пространств имен .
Следующий скрипт показывает возможный подход к получению буквы диска, назначенной в данный момент тому. Использует класс Win32_Volume :
Win32_Volume
Класс представляет собой область памяти на жестком диске. Класс возвращает локальные тома, которые отформатированы, не отформатированы, смонтированы или отключены. Том форматируется с использованием файловой системы, такой какFAT
илиNTFS
, и ему может быть назначена буква диска. Один жесткий диск может иметь несколько томов, а тома могут занимать несколько физических дисков.Win32_Volume
Класс не поддерживает управление диска.
@ECHO OFF SETLOCAL EnableExtensions DisableDelayedExpansion call :getDriveLetter "\\?\Volume\" call :getDriveLetter "\\?\Volume\" call :getDriveLetter "\\?\Volume\" :endlocal ENDLOCAL goto :eof :getDriveLetter set "_volumeID=%~1" set "_DriveLetter=" for /F "tokens=1,* delims==" %%G in (' wmic volume where "DeviceID='%_volumeID:\=\\%'" get DriveLetter /value ') do for /F %%g in ("%%~H") do set "_%%~G=%%~g" call :doSomething goto :eof :doSomething rem only output for debugging if defined _DriveLetter ( echo %_volumeID% DriveLetter %_DriveLetter% ) else ( echo %_volumeID% DriveLetter unknown ) goto :eof
Выход :
d:\temp> D:\bat\SU\1163592.bat \\?\Volume\ DriveLetter F: \\?\Volume\ DriveLetter unknown \\?\Volume\ DriveLetter E: