Почему цикл FOR / f в этом пакетном скрипте оценивает пустую строку?
Я пытаюсь написать пакетный скрипт, который получает (среди прочего) список всех дисков, которые есть у компьютера. Основной код выглядит примерно так:
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:\\|"
)
Я довольно очевидно строю два списка с немного различными форматами для использования позже. Однако когда я запускаю это, вывод, который я получаю, выглядит примерно так:
C|D|E||
C:\\|D:\\|E:\\|:\\|
Теперь, я ожидаю, что в обоих случаях трейлинг-труба будет, и я могу справиться с этим, но я действительно растерялся, почему там есть дополнительная пустая запись. Если я бегуwmic
вручную, я вижу, что в конце вывода есть пустая строка, но я понимаю, что/f
специально должен был игнорировать пустые строки.
Если я повернуECHO
на, похоже, что последняя строка просто появляется как возврат каретки / перевод строки или подобный. Есть ли способ сделать то, что я ожидаю? Я что-то пропустил? Я пытался написатьif
условие в цикле, чтобы исключить эту последнюю строку, но это было ... фанк и никогда не работал. Я ценю любую помощь.