Я хотел бы прочитать текущее разрешение монитора и установить переменную среды. Это работает в WinXP, но не в Vista, потому что wmic добавляет новую строку в конце:

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

2 ответа2

1

Благодаря ответу Бена Нессона я нашел простое решение, которое работает как на XP, так и на Vista: просто отправьте wmic-вывод в findstr и уберите все символы новой строки:

FOR /F %%L IN ('wmic desktopmonitor get screenheight ^| findstr "."') DO set YRES=%%L
1

О, этот дополнительный возврат каретки делает некоторые странные вещи.

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!]

Итак, спасибо, вы дали мне новую странную вещь, чтобы попытаться выяснить, вместо того, чтобы делать реальную работу!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .