@ECHO OFF
SETLOCAL
SET volume=%1
IF NOT DEFINED volume SET volume=%CD%
SET "volume=%volume:~0,1%:"
SET "vlabel="
SET "vserial="
FOR /f "delims=" %%a IN ('vol %volume%') DO (
CALL :lastparm %%a
)
ECHO LABEL is %vlabel%
ECHO Serial is %vserial%
endlocal&set vlabel=%vlabel%&set vserial=%vserial%
GOTO :EOF
:lastparm
SET $1=%2
IF DEFINED $1 shift& GOTO lastparm
IF DEFINED vlabel (SET vserial=%1) ELSE (SET vlabel=%1)
GOTO :eof
Это должно делать то, что вы запрашиваете - в пределах. Запустите пакет, предоставив вам имя в качестве первого параметра. Если параметр не задан, будет выбран текущий диск.
В английском языке ответ от VOL
может быть
Volume in drive C has no label.
Volume Serial Number is 830B-46FA
Volume in drive M is XPC
Volume Serial Number is 62FF-EBB1
Так, казалось бы, независимый от языка версия может быть немного трудно. Вышеприведенный код дал бы label.
для C:
, а не no label.
Что бы сгенерировал любой другой язык, я понятия не имею.
Возможно, однако, что ответ в нижнем регистре может быть способом определения «немеченого» - я считаю, что настоящая метка должна быть в верхнем регистре.
И оказывается, что метка тома теперь может быть до 32 символов, и я понятия не имею ли пространства теперь разрешены ...
Edit: добавлен ENDLOCAL
строки, чтобы установить значение, найденное в среде вызывающего абонента. На первый взгляд метод не кажется логичным, но использует процедуру синтаксического анализа, используемую cmd
. Вся строка endlocal
разобран и %var%
с заменены на их содержимое. Затем выполняется строка, которая сначала предоставляет все обновления среды, сделанные с setlocal
, а затем присваивает значения, представляющие интерес, для переменных.
спасибо! есть ли способ включить это как собственный скрипт и использовать переменные в главном скрипте? например: call your-published-script-in-batch-file.bat && echo vlabel:% vlabel% – Robin