2013-12-22 3 views
0

, например мой volumelabel для буква_диска е является объемно-AbCкак получить volumelabel для текущей консоли оперативного

так, например, им в оболочке по адресу:

e:\directory-a\bc\> 

теперь я нужно volumelabel из буква_диска х:, с утверждением:

vol %CD:~0,1%: 

я буду получать текущую volumelabel, но с кучей вокруг него (извините, только на немецком языке):

Datenträger in Laufwerk E: ist volume-abc 
Volumeseriennummer: 4A69-FD21 

так что, возможно, можно разобрать/извлечь строку объемно-а от этого выхода, но это кажется мне плохой, потому что выход может отличаться от окон и языковой версии. поэтому я не знаю, как сделать эту операцию строки надежным способом.

ответ

0
@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, а затем присваивает значения, представляющие интерес, для переменных.

+0

спасибо! есть ли способ включить это как собственный скрипт и использовать переменные в главном скрипте? например: call your-published-script-in-batch-file.bat && echo vlabel:% vlabel% – Robin