О, этот дополнительный возврат каретки делает некоторые странные вещи.
tl; dr: Кажется, что-то вроде этого работает:
FOR /F %%L in ('wmic desktopmonitor get screenheight') DO (
CALL :foo "%%L"
)
:: ...
GOTO :EOF
:foo
IF NOT [%~1]==[] set RESULT=%~1
GOTO :EOF
Как бы то ни было, корень проблемы, как вы заметили, заключается в странном выводе этих дополнительных возвратов каретки. (Он также выбрасывает некоторые пробелы для хорошей меры, но без "delims =" или чего-то другого, они отбрасываются циклом for.) Обычно FOR просто игнорирует пустые строки, но по какой-то причине вместо стандартной строки "\r\n" wmic выплевывает "\r\r\n". И я думаю, что FOR не справляется с этим разумно.
На самом деле, cmd вообще не справляется с этим разумно. Я попытался установить %% L для переменной temp и проверить переменную temp с помощью EnableDelayedExpansion, но это не сработало надежно; кажется, что% var% будет отбрасывать возврат каретки, в то время как!вар! сохраняет их. Идите дальше, попробуйте угадать, что вы получите от этого:
@ echo off
setlocal EnableDelayedExpansion
for /f %%a in ('wmic desktopmonitor get status') DO (
set t=%%a
set bang=!t!
)
set doodle=%t%
set bangbang=!bang!
set bangdoodle=%bang%
ECHO [%doodle%]
ECHO [!doodle!]
ECHO [%bang%]
ECHO [!bang!]
ECHO [%bangbang%]
ECHO [!bangbang!]
ECHO [%bangdoodle%]
ECHO [!bangdoodle!]
Итак, спасибо, вы дали мне новую странную вещь, чтобы попытаться выяснить, вместо того, чтобы делать реальную работу!