È possibile ottenere SOLO l'etichetta dell'unità utilizzando WMIC?


1

Utilizzando WMIC, voglio ottenere solo l'etichetta dell'unità in base alla lettera dell'unità:

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

Ora, quelli di voi che capiscono la riga di comando di Windows vedranno perché questo non funziona come previsto, perché sto "facendo" un eco. Quindi, usando quanto sopra, l'output è simile al seguente (che non è quello che spero):

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.

L'output non elaborato del comando WMIC è simile al seguente:

Label
System

L'obiettivo è semplicemente saltare la prima riga (perché stavo cercando di usare for /f "skip=1"...) e ottenere solo la seconda riga. Tuttavia, non sono sicuro di come visualizzare semplicemente questo senza fare eco.


La soluzione deve essere utilizzata wmic? Ho una soluzione basata su PowerShell se è di aiuto?
Crippledsmurf

Risposte:


2

Hai due problemi. Techie007 ha identificato il primo: è necessario aggiungere il prefisso al comando DO @se si desidera impedire che il comando venga ripetuto sullo schermo. Ciò non è necessario se ECHO è OFF.

L'altro problema è un artefatto molto fastidioso di come FOR / F interagisce con l'output unicode di WMIC. In qualche modo l'unicode viene erroneamente convertito in ANSI in modo tale che ogni riga termina con \ r \ r \ n. FOR / F si interrompe a ogni \ n e rimuove solo un singolo terminale, lasciando un ulteriore indesiderato. (Si noti che \ r rappresenta un carattere di ritorno a capo e \ na carattere di nuova riga)

L'output WMIC include una riga vuota aggiuntiva alla fine. L'ulteriore indesiderato impedisce a FOR / F di ignorare la linea (non è vista come vuota). Quando ECHO ottieni il valoreECHO is on.

Esistono diversi modi per gestirlo, ma il mio preferito è passare l'output attraverso un FOR / F extra per rimuovere gli indesiderati.

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

Grazie. Non avevo nemmeno notato il ritorno del trasporto extra alla fine. Funziona come un campione.
Sembra il

1

Prefisso Echocon un @simbolo per impedire la visualizzazione del comando.

vale a dire (frammentato per brevità):

for ... do @echo %a
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.