Oh, esse retorno extra de carro faz algum coisa esquisita .
tl; dr : Algo parecido com isto parece funcionar:
FOR /F %%L in ('wmic desktopmonitor get screenheight') DO (
CALL :foo "%%L"
)
:: ...
GOTO :EOF
:foo
IF NOT [%~1]==[] set RESULT=%~1
GOTO :EOF
De qualquer forma, a raiz do problema, como você observou, é o wmic que produz estranhamente os retornos extras de carro. (Ele também coloca alguns espaços para uma boa medida, mas sem "delims =" ou algo assim, eles são descartados pelo loop for.) Normalmente, FOR apenas ignorará linhas em branco, mas por algum motivo, em vez do padrão "\ r \ n "newline, wmic spits out" \ r \ r \ n ". E eu acho que FOR não lida com isso de forma sensata.
De fato, cmd em geral não lida com isso de forma sensata. Eu tentei definir %% L para uma variável temporária e verificar a variável temp com EnableDelayedExpansion, mas não funcionou de forma confiável; parece que% var% descarta retornos de carro, enquanto! var! retê-los. Vá em frente, tente adivinhar qual saída você obterá com isso:
@ 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!]
Então, obrigado, você me deu uma nova coisa estranha para tentar descobrir em vez de fazer o trabalho real!