Пакетный файл, чтобы получить все доступные видеокарты, добавить их в переменные и вывести их - PullRequest
0 голосов
/ 24 апреля 2020

Несколько ноутбуков теперь имеют две видеокарты, и мне нужна помощь, как добавить их в переменные и вывести их на экран или текстовый файл в командном файле.

В cmd я использую wmic PATH Win32_videocontroller GET description, и он выводит две графики:

  • Описание
NVIDIA GeForce MX150
Intel(R) UHD Graphics 620
  • Но если я использую:
for /F "tokens=2 delims='='" %%A in ('wmic PATH Win32_videocontroller GET description /value') do set vga=%%A
echo %vga%

Я просто получаю Intel(R) UHD Graphics 620 и не обе графики!

Мне нужны все доступные видеокарты, чтобы я мог выводить их на экран и в файл, используя переменные:

  • Например.
VGA1: NVIDIA GeForce MX150
VGA2: Intel(R) UHD Graphics 620

Спасибо!

РЕДАКТИРОВАТЬ: я нахожу способ показать обе графики, но я все еще не знаю, как добавить их в отдельные переменные: (*

setlocal enabledelayedexpansion
set i=0
for /f "tokens=2 delims='='" %%a in ('wmic PATH Win32_videocontroller GET description /value ') do (
     set /a i+=1
     set VGA!i!=%%a
   )
set VGA

Показывает обе карты, хотя я бы предпочел:

VGA1: NVIDIA...  instead of  VGA1=NVIDIA... 

Заменить "=" на ":", но я тоже не могу этого сделать: (

VGA1=NVIDIA GeForce MX150
VGA2=Intel(R) UHD Graphics 620

Ответы [ 3 ]

1 голос
/ 24 апреля 2020
@echo off
setlocal enabledelayedexpansion
set i=0
for /f "tokens=2 delims==" %%a in ('wmic PATH Win32_videocontroller GET description /value ') do (
  set /a i+=1
  set VGA!i!=%%a
)
rem set VGA
for /f "tokens=1,* delims==" %%A in ('set VGA') do echo %%A: %%B

set VGA печатает name=value, поскольку это то, что он делает. Используйте for /f l oop, чтобы ограничить =, а затем просто echo token1: token2

Так что вы почти сделали это. '=' - это нечетный набор из 3 разделителей, вместо него используйте =.

У меня только 1 карта на текущем компьютере, поэтому вывод:

VGA1: NVIDIA GeForce GTX 750 Ti

1 голос
/ 24 апреля 2020

Вывод, который вы получаете на экран, является прямым выводом вашей команды set VGA.

Без изменения остальной части вашего кода вам просто нужно изменить или заменить эту строку.


Вы можете заменить его на:
For /F "Tokens=1*Delims==" %%G In ('Set VGA 2^>NUL')Do Echo %%G: %%H

Несмотря на то, что для этого конкретного метода, вы действительно должны включить строку перед вашим , чтобы убедиться, что не было любые существующие переменные с именем, начинающимся с VGA до того, как вы запустили .

For /F "Delims==" %%G In ('Set VGA 2^>NUL')Do Set "%%G="


Альтернативно и проще в в этом случае вы могли бы заменить его на это вместо :
If %i% Gtr 0 For /L %%G In (1,1,%i%)Do Echo VGA%%G: !VGA%%G!

Если бы у вас не было включено отложенное расширение, было бы больше накладных расходов, (хотя и незначительное, поскольку маловероятно, что в вашей системе более двух-трех видеокарт) , вы можете изменить это на:

If %i% Gtr 0 For /L %%G In (1,1,%i%)Do Call Echo VGA%%G: %%VGA%%G%%


Существует проблема, которая может или не может быть важной для вас, в связи с чем описания могут иметь завершающие пробелы. Если у вас возникла эта проблема, вы можете изменить скрипт для изменения типа вывода с .

Например:

@Echo Off
SetLocal EnableDelayedExpansion
Set "i=0"
For /F Tokens^=6Delims^=^" %%G In (
  '"%__AppDir__%wbem\WMIC.exe" Path Win32_VideoController Get Description /Format:MOF 2^>NUL'
)Do Set /A i+=1&Set "VGA!i!=%%G"
If %i% Gtr 0 (For /L %%G In (1,1,%i%)Do Echo VGA%%G: !VGA%%G!)&Pause
1 голос
/ 24 апреля 2020

Для этого вывода:

VGA1: NVIDIA GeForce MX150
VGA2: Intel(R) UHD Graphics 620

Просто попробуйте это:

@echo off  && setlocal enabledelayedexpansion

for /f tokens^=* %%a in ('
%__APPDIR__%wbem\wmic.exe PATH Win32_videocontroller GET description^|findstr [0-9]
')do echo/%%~a|find "NV" >nul && (set "_VGA1=VGA1: %%~a") || set "_VGA2=VGA2: %%~a" 
(for %%V in (vga1,vga2)do echo\!_%%~V!) && endlocal && "%__APPDIR__%timeout.exe" -1
...