Estoy tratando de escribir un script por lotes que obtenga (entre otras cosas) una lista de todas las unidades de disco que tiene la computadora. El código básico se ve más o menos así:¿Por qué el bucle FOR/f en este script por lotes evalúa una línea en blanco?
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:\\|"
)
Obviamente, creo dos listas con formatos ligeramente diferentes para su uso posterior. Cuando ejecuto esto, sin embargo, la salida de recibo es como la siguiente:
C|D|E||
C:\\|D:\\|E:\\|:\\|
Ahora, espero que el tubo de arrastre en ambos casos y que puedo manejar eso, pero estoy realmente confundido por qué hay un extra entrada en blanco allí. Si ejecuto el comando wmic
manualmente, puedo ver que efectivamente hay una línea en blanco al final de la salida, pero mi entendimiento es que se suponía que el /f
ignoraba las líneas en blanco.
Si enciendo ECHO
, parece que la última línea acaba de entrar como un retorno de carro/línea nueva o similar. ¿Hay alguna manera de hacer lo que estoy esperando? ¿Me estoy perdiendo de algo? Traté de escribir una condición if
en el ciclo para excluir esta última línea, pero fue ... funky y nunca funcionó. Agradezco toda ayuda.
Wow, vivimos y aprendemos, ¿verdad? Me pregunto por qué una utilidad como WMIC produciría un solo carácter '' en una línea en primer lugar ... O tal vez ese es el resultado de lo que @matt descubrió. –
Supongo que no es el problema Unicode, ya que incluso en XP Microsoft no sabía cómo deberían ser sus propias terminaciones de línea. IPconfig (XP) también produce terminaciones de línea inconscientes – jeb
Gracias a jeb y matt por las respuestas. Ambas soluciones funcionaron, pero la de jeb no me requirió crear archivos temporales así que acepto la suya. – Morinar