Sto provando a scrivere uno script batch che ottiene (tra le altre cose) un elenco di tutte le unità disco del computer. Il codice di base simile a questa:Perché il ciclo FOR/f in questo script batch valuta una riga vuota?
REM Build the list of disk drives to monitor
SETLOCAL enabledelayedexpansion
FOR /f "skip=1 tokens=1 delims=:" %%a in ('"WMIC logicaldisk WHERE drivetype=3 GET deviceid"') do (
SET "DISK_DATABASES=!DISK_DATABASES!%%a|"
SET "DRIVES_TO_MONITOR=!DRIVES_TO_MONITOR!%%a:\\|"
)
ho abbastanza, ovviamente, costruire due liste con formati leggermente diversi per un uso successivo. Quando ho eseguito questo, però, l'uscita ottengo simile a questa:
C|D|E||
C:\\|D:\\|E:\\|:\\|
Ora, mi aspetto che il tubo finale in entrambi i casi e posso gestire tale, ma sono davvero confusa perché c'è un extra entrata vuota lì. Se eseguo il comando wmic
manualmente, posso vedere che c'è effettivamente una riga vuota alla fine dell'output, ma la mia comprensione è che lo /f
doveva ignorare le righe vuote.
Se accendo lo ECHO
, sembra che l'ultima riga sia appena arrivata come un ritorno a capo/a capo o simile. C'è un modo per fare ciò che mi aspetto? Mi sto perdendo qualcosa? Ho provato a scrivere una condizione if
nel ciclo per escludere quest'ultima riga, ma era ... funky e non ha mai funzionato. Apprezzo qualsiasi/tutto l'aiuto.
Wow, viviamo e imparare, non è vero? Mi chiedo perché una utility come WMIC produca un singolo carattere '' su una riga in primo luogo ... O forse questo è il risultato di ciò che @matt ha scoperto. –
Suppongo che non sia il problema Unicode, in quanto anche in XP Microsoft non sapeva come dovrebbero essere i loro finali di linea. IPconfig (XP) produce anche terminazioni di linea incostanti – jeb
Grazie a jeb e matt per le risposte. Entrambe le soluzioni hanno funzionato, ma jeb non mi ha richiesto di creare file temporanei, quindi accetto il suo. – Morinar