Почему цикл 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 условие в цикле, чтобы исключить эту последнюю строку, но это было ... фанк и никогда не работал. Я ценю любую помощь.

Ответы на вопрос(7)

Ваш ответ на вопрос