É possível obter SOMENTE o rótulo da unidade usando o WMIC?

1

Usando o WMIC, quero obter apenas o rótulo da unidade com base na letra da unidade:

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

Agora, aqueles que entendem a linha de comando do Windows verão por que isso não funciona como esperado, porque estou "fazendo" um eco. Então, usando o acima, a saída se parece com o seguinte (que não é o que eu estou esperando):

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.

A saída bruta do comando WMIC se parece com o seguinte:

Label
System

O objetivo é simplesmente pular a primeira linha (por que eu estava tentando usar for /f "skip=1"... ) e obter apenas a segunda linha. No entanto, não tenho certeza de como exibir isso sem ecoá-lo.

    
por Beems 07.03.2015 / 00:06

2 respostas

2

Você tem dois problemas. Techie007 identificou o primeiro - Você deve prefixar seu comando DO com @ se quiser impedir que o comando seja ecoado na tela. Isso não é necessário se o ECHO estiver desligado.

O outro problema é um artefato muito chato de como o FOR / F interage com a saída unicode do WMIC. De alguma forma, o unicode é indevidamente convertido em ANSI, de forma que cada linha termina com \ r \ r \ n. FOR / F quebra em cada \ n, e apenas retira um único terminal, deixando um extra indesejado. (Observe que \ r representa um caractere de retorno de carro e \ n um caractere de nova linha)

A saída da WMIC inclui uma linha extra vazia no final. O extra indesejado impede que o FOR / F ignore a linha (não é visto como vazio). Quando você ECHO o valor que você obtém ECHO is on.

Existem várias maneiras de lidar com isso, mas o meu favorito é passar a saída através de um FOR / F extra para remover o indesejado \ 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
    
por 07.03.2015 / 15:20
1

Prefixe Echo com um símbolo @ para evitar a exibição do comando.

i.e. (recortado por brevidade):

for ... do @echo %a
    
por 07.03.2015 / 04:43