Oh, ce retour de voiture supplémentaire fait des trucs bizarres .
tl; dr : Quelque chose comme ça semble fonctionner:
FOR /F %%L in ('wmic desktopmonitor get screenheight') DO (
CALL :foo "%%L"
)
:: ...
GOTO :EOF
:foo
IF NOT [%~1]==[] set RESULT=%~1
GOTO :EOF
Quoi qu’il en soit, comme vous l’avez indiqué, le problème est que wmic produit bizarrement ces retours chariot supplémentaires. (Il jette également dans certains espaces pour faire bonne mesure, mais sans "delims =" ou quelque chose, ceux-ci sont éjectés par la boucle for.) Ordinairement, FOR ignore simplement les lignes vides, mais pour une raison quelconque, au lieu du standard "\ r \ n "newline, wmic crache" \ r \ r \ n ". Et je suppose que FOR ne gère pas cela raisonnablement.
En fait, cmd en général ne gère pas cela de façon sensée. J'ai essayé de définir %% L sur une variable temporaire et de vérifier la variable temporaire avec EnableDelayedExpansion, mais cela ne fonctionnait pas de manière fiable. il semble que% var% va rejeter les retours chariots, tandis que! var! les conserve. Allez-y, essayez de deviner quelle sortie vous obtiendrez de ceci:
@ 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!]
Alors merci, vous m'avez donné une nouvelle chose étrange d'essayer de comprendre au lieu de faire du travail réel!