Выполните команду script в зависимости от разрешения экрана
3 Arnaud [2018-04-13 18:42:00]
Я попытался найти ответ на некоторые другие темы, но я думаю, что то, что я пытаюсь сделать, немного "специфично". Я не достаточно хорош с партией для адаптации/конкатенации частей скриптов, которые я нашел также...
Итак, я пытаюсь выполнить команду, в зависимости от разрешения экрана. Контекст следующий:
Команда, выполняемая при входе в систему, размещает ярлыки на рабочем столе специально, но это не то же расположение между разрешениями...
Идея состоит в том, чтобы определить переменную, которая является ответом на запрос wmic desktopmonitor получить экранный экран, экранную ширину. Затем, если вывод содержит 1080, выполните этот cmd, иначе, если он содержит 720, выполните другой и т.д.
thats cmd я использую для win7 (рабочий);
for /f "tokens=1-2 delims= " %%r in ('wmic desktopmonitor get screenheight^, screenwidth ^| findstr "1"') do set current_res=%%sx%%r
if "%current_res%" == "1920x1080" C:\Windows\kiosque\desktopok.exe /load /silent c:\windows\kiosque\dispo_icones_1080p.dok
Мне нужно сделать то же самое с win10 с wmic path Win32_VideoController получить VideoModeDescription, но я не нашел, как правильно определить вывод этого запроса как переменной...
Заранее благодарим за помощь Arnaud
screen resolution batch-file request execute
2 ответа
1 Решение npocmaka [2018-04-13 19:18:00]
Вам нужны разные wmic-запросы, зависящие от версии windows. Здесь есть разрешение, которое зависит от версии:
@echo off
::https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions
setlocal
for /f "tokens=4,5 delims=. " %%a in ('ver') do set "version=%%a%%b"
if version lss 62 (
::wmic_query=wmic desktopmonitor get screenheight, screenwidth /format:value"
for /f "tokens=* delims=" %%@ in ('wmic desktopmonitor get screenwidth /format:value') do (
for /f "tokens=2 delims==" %%# in ("%%@") do set "x=%%#"
)
for /f "tokens=* delims=" %%@ in ('wmic desktopmonitor get screenheight /format:value') do (
for /f "tokens=2 delims==" %%# in ("%%@") do set "y=%%#"
)
) else (
::wmic path Win32_VideoController get VideoModeDescription,CurrentVerticalResolution,CurrentHorizontalResolution /format:value
for /f "tokens=* delims=" %%@ in ('wmic path Win32_VideoController get CurrentHorizontalResolution /format:value') do (
for /f "tokens=2 delims==" %%# in ("%%@") do set "x=%%#"
)
for /f "tokens=* delims=" %%@ in ('wmic path Win32_VideoController get CurrentVerticalResolution /format:value') do (
for /f "tokens=2 delims==" %%# in ("%%@") do set "y=%%#"
)
)
echo Resolution %x%x%y%
::if "%x%x%y%" == "1920x1080" C:\Windows\kiosque\desktopok.exe /load /silent c:\windows\kiosque\dispo_icones_1080p.dok
endlocal
Для окон 7 или более ранних версий вам нужен desktopmonitor класс для более новых версий Windows, которые вам нужны Win32_VideoController. Вы можете попробовать с dxdiag тоже:
@echo off
del ~.txt /q /f >nul 2>nul
start "" /w dxdiag /t ~
setlocal enableDelayedExpansion
set currmon=1
for /f "tokens=2 delims=:" %%a in ('find "Current Mode:" ~.txt') do (
echo Monitor !currmon! : %%a
set /a currmon=currmon+1
)
endlocal
del ~.txt /q /f >nul 2>nul
2 Compo [2018-04-13 19:13:00]
Поскольку Win32_VideoController был протестирован как работающий в моих системах Windows 7 и Windows 10, вот несколько примеров Win32_VideoController:
Извлечение горизонтального разрешения, как указано в вашем вопросе, как определяющий фактор:
For /F "Delims=" %%A In (
'WMIC Path Win32_VideoController Get CurrentHorizontalResolution'
) Do For %%B In (%%A) Do Set "ResW=%%B"
Аналогично, если вы хотите проверить только вертикальное разрешение:
For /F "Delims=" %%A In (
'WMIC Path Win32_VideoController Get CurrentVerticalResolution'
) Do For %%B In (%%A) Do Set "ResH=%%B"
И если вы хотите разрешение в формате WxH:
@Echo Off
Set "WP=Path Win32_VideoController"
Set "WV=CurrentHorizontalResolution,CurrentVerticalResolution"
For /F "Skip=1 Tokens=*" %%A In ('"WMIC %WP% Get %WV%"'
) Do For /F "Tokens=1-2" %%B In ("%%A") Do Set ScRes=%%Bx%%C
Echo=%ScRes%
Pause
Если вы хотите версию, которая учитывает как DesktopMonitor, так и Win32_VideoController, то, возможно, это будет сделано (начиная с Vista):
@Echo Off
Set "OV="
For /F "EOL=V" %%A In ('WMIc OS Get Version 2^>Nul'
) Do For /F "Tokens=1-2 Delims=." %%B In ("%%A") Do Set /A "OV=%%B%%C"
If Not Defined OV Exit /B
Set "ScRes=%%Cx%%B" & Set "WP=DesktopMonitor"
Set "WV=ScreenHeight,ScreenWidth"
If %OV% GEq 61 (Set "WP=Path Win32_VideoController" & Set "ScRes=%%Bx%%C"
Set "WV=CurrentHorizontalResolution,CurrentVerticalResolution")
For /F "Skip=1 Tokens=*" %%A In ('"WMIC %WP% Get %WV%"'
) Do For /F "Tokens=1-2" %%B In ("%%A") Do Set ScRes=%ScRes%
Echo=%ScRes%
Pause
Я оставил строку 8 как GEq 61 для версий, по крайней мере, для Windows 7, потому что, как я уже сказал, она работает на моей версии для Windows 7.
Однако вы можете изменить это, чтобы читать Gtr 61 для Windows 8/Server 2012 и выше, или даже Gtr 63, если вы хотите ограничить его чем-либо выше Windows 8.1/Server 2012 R2