2015-11-19 2 views
1

Для сценария резервного копирования, запущенного под интерфейсом командной строки в Windows, я хочу получить букву диска определенного тома жесткого диска (хранится в переменной %lookfor%). Это код, который я придумал до сих пор.Получение буквы диска volumename в командной строке Windows

set lookfor=yourvolume 
for /f "tokens=1,2,*" %%D in ('wmic logicaldisk get VolumeName^, Caption^') Do ( 
if %%F equ "" (
     @echo %%D has the VolumeName %%E 
     if "%%E" equ "%lookfor%" (
      set letter=%%D 
     ) 
    ) else (
     @echo %%D has the VolumeName %%E %%F 
     if "%%F" equ "%lookfor%" (
     set letter=%%D 
     ) 
    ) 
) 
echo The Volume %lookfor% has the driveletter %letter% 

Назначение буквенного указателя на переменный диск явно не срабатывает. Как я могу это ответить? Параметр

ответ

1

Используйте Wmic в where указать, что искать:

for /f %%a in (' 
    wmic logicaldisk where "VolumeName='%lookfor%'" get Caption ^| find ":" 
') do set letter=%%a 
+0

Thx so much !! Он отлично работает и намного проще и короче, чем мой код. – user3210625

0

Вы не показали нам, что lookfor установлен в положение, ни то, что ваш wmic выход. Вот мой ...

Подпись VolumeName
C:
M: XPC
N:
P:
Q:
R: Система Reserved
U:
V:
W: Система Зарезервирована

Ваша линия

if %%F equ "" (

некорректен, так как %%F никогда не могут быть идентичны "" Вам нужно

if "%%F" equ "" (

Следовательно, будет всегда быть принято else ветвь первого if.

Ваш

if "%%F" equ "%lookfor%" (

Intriguingly, правильный синтаксис. Мы не знаем, что вы пытаетесь найти, но с помощью приведенного выше примера, параметры должны быть:

 
%%D  |%%E  |%%F 
Caption |VolumeName| 
C:  |   | 
M:  |XPC  | 
N:  |   | 
P:  |   | 
Q:  |   | 
R:  |System |Reserved 
U:  |   | 
V:  |   | 
W:  |System |Reserved 

Так %%F не может быть то, что вы ожидаете.

Возможно

for /f "tokens=1,*" %%D in (
    'wmic logicaldisk get VolumeName^, Caption^' 
) Do (echo D=%%D E=%%E) 

будет лучше для ваших целей.

и

if /i .... 

делает сравнение без учета регистра.

+0

Большое спасибо. Строка '@echo %% D имеет значение VolumeName %% E %% F', на самом деле только там, чтобы проверить, правильно ли выполнялось условие if, и контрольные переменные были назначены правильно. '% Lookfor%' должен быть адаптирован к любому volumename, который вы ищете на своем компьютере.Смысл всего фрагмента кода заключался в том, чтобы получить информационный бюллетень для данного volumename. – user3210625

Смежные вопросы