1

Используя WMIC, я хочу получить только метку диска на основе буквы диска:

for /f "skip=1" %a in ('wmic volume where "Driveletter like '%C%'" get label') do echo %a

Теперь те из вас, кто понимает командную строку Windows, поймут, почему это не работает должным образом, потому что я "делаю" эхо. Итак, используя вышеизложенное, вывод выглядит следующим образом (на что я не надеюсь):

C:\>for /f "skip=1" %a in ('wmic volume where "Driveletter like '%C%'" get label') do echo %a

C:\>echo System
System

C:\>echo
ECHO is on.

Необработанный вывод команды WMIC выглядит следующим образом:

Label
System

Цель состоит в том, чтобы просто пропустить первую строку (почему я пытался использовать for /f "skip=1"...) и получить только вторую строку. Тем не менее, я не уверен, как просто отобразить это, не повторяя его.

2 ответа2

2

У тебя две проблемы. Techie007 идентифицировал первый - вы должны добавить префикс вашей команды DO к @ если вы хотите, чтобы команда не отображалась на экране. В этом нет необходимости, если ECHO выключен.

Другая проблема - очень раздражающий артефакт того, как FOR /F взаимодействует с выводом Unicode WMIC. Каким-то образом юникод неправильно преобразован в ANSI, так что каждая строка заканчивается на \r \r \n. FOR /F прерывается на каждом \n и удаляет только один терминал \r, оставляя дополнительный нежелательный \r. (Обратите внимание, что \r представляет символ возврата каретки и \na символ новой строки)

Вывод WMIC включает в себя дополнительную пустую строку в конце. Дополнительный нежелательный параметр \r не позволяет FOR /F игнорировать строку (она не рассматривается как пустая). Когда вы получаете ECHO, вы получаете значение ECHO is on.

Есть несколько способов справиться с этим, но мой любимый способ - передать вывод через дополнительный FOR /F, чтобы удалить ненужные \r.

for /f "skip=1 delims=" %a in ('wmic volume where "Driveletter like '%C%'" get label') do @for /f "delims=" %b in ("%a") do @echo %b
1

Префикс Echo с символом @ чтобы не показывать команду.

то есть (для краткости):

for ... do @echo %a

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .