현재 모니터 해상도를 읽고 환경 변수를 설정하고 싶습니다. wmic는 끝에 줄 바꿈을 추가하기 때문에 WinXP에서는 작동하지만 Vista에서는 작동하지 않습니다.
FOR /F %%L IN ('wmic desktopmonitor get screenheight') DO set YRES=%%L
테스트 추가가 예상대로 작동하지 않습니다.
FOR /F %%L IN ('wmic desktopmonitor get screenheight') DO if not [%%L]==[] set YRES=%%L
답변
아, 그 여분의 캐리지 리턴은 이상한 일을 합니다.
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을 임시 변수로 설정하고 EnableDelayedExpansion으로 임시 변수를 확인하려고 시도했지만 안정적으로 작동하지 않았습니다. % var %는 캐리지 리턴을 버리고! 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!]
고마워, 당신은 나에게 실제 작업 대신에 알아낼 새로운 이상한 일을 주었다!
답변
Ben Nesson의 답변 덕분에 XP와 Vista에서 모두 작동하는 쉬운 솔루션을 찾았 습니다. 모든 줄 바꿈을 찾기 위해 스트립 wmic 출력 :
FOR /F %%L IN ('wmic desktopmonitor get screenheight ^| findstr "."') DO set YRES=%%L