2 votes

Est-il possible d'obtenir UNIQUEMENT l'étiquette du lecteur en utilisant WMIC ?

En utilisant WMIC, je veux obtenir sólo l'étiquette du lecteur en fonction de la lettre du lecteur :

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

Ceux d'entre vous qui comprennent la ligne de commande de Windows verront pourquoi cela ne fonctionne pas comme prévu, car je "fais" un écho. Donc, en utilisant ce qui précède, la sortie ressemble à ce qui suit (ce qui n'est pas ce que j'espérais) :

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.

La sortie brute de la commande WMIC ressemble à ce qui suit :

Label
System

Le but est de simplement sauter la première ligne (pourquoi j'essayais d'utiliser for /f "skip=1"... ) et n'obtient que la deuxième ligne. Cependant, je ne suis pas sûr de savoir comment l'afficher simplement sans en faire l'écho.

0 votes

La solution doit-elle utiliser wmic ? J'ai une solution basée sur PowerShell si cela peut vous aider ?

3voto

dbenham Points 10555

Vous avez deux problèmes. Techie007 a identifié le premier - Vous devez préfixer votre commande DO avec @ si vous voulez empêcher l'écho de la commande à l'écran. Ceci n'est pas nécessaire si ECHO est désactivé.

L'autre problème est un artefact très ennuyeux lié à la façon dont FOR /F interagit avec la sortie unicode de WMIC. D'une manière ou d'une autre, l'unicode est incorrectement converti en ANSI de sorte que chaque ligne se termine par \r\r\n. Les pauses FOR /F à chaque \n et ne dénude qu'une seule borne \r en laissant un indésirable supplémentaire \r. (Notez que \r représente un caractère de retour de chariot, et \n un caractère de nouvelle ligne)

La sortie WMIC comprend une ligne vide supplémentaire à la fin. La ligne supplémentaire non désirée \r empêche FOR /F d'ignorer la ligne (elle n'est pas considérée comme vide). Lorsque vous ECHO la valeur, vous obtenez ECHO is on.

Il existe plusieurs façons de gérer ce problème, mais ma préférée est de faire passer la sortie par un FOR /F supplémentaire afin de supprimer les éléments indésirables. \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

1voto

Brandon Points 2580

Préfixe Echo avec un @ pour empêcher l'affichage de la commande.

c'est-à-dire (coupé pour la brièveté) :

for ... do @echo %a

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X