Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Работа с WMIC

Ответить
Настройки темы
CMD/BAT - [решено] Работа с WMIC

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здраствуйте. Нуждаюсь в помощи. С помощью WMIC мне необходимо получить информацию и вывести её в таком виде:

Memory 1: BANK 0 ChannelA-DIMM0 CMX4GX3M2A1600C9 1333Mhz 2Gb
Memory 2: BANK 2 ChannelB-DIMM0 CMX4GX3M2A1600C9 1333Mhz 2Gb

Подскажите, как это можно осуществить максимально эффективным способом.
Я пробовал через редактирование txt файла с выведенными в него данными командой:

for /F "tokens=2 delims==" %%J in ('WMIC MemoryChip get BankLabel /Value^|FindStr .') do echo %%J>>1.txt
for /F "tokens=2 delims==" %%J in ('WMIC MemoryChip get DeviceLocator /Value^|FindStr .') do echo %%J>>1.txt
for /F "tokens=2 delims==" %%J in ('WMIC MemoryChip get PartNumber /Value^|FindStr .') do echo %%J>>1.txt
for /F "tokens=2 delims==" %%J in ('WMIC MemoryChip get Speed /Value^|FindStr .') do echo %%J>>1.txt
for /F "tokens=2 delims==" %%J in ('WMIC MemoryChip get Capacity /Value^|FindStr .') do (
set num1=%%J
set /a res=num1/1073741824+1
echo !res!>>1.txt
)
Очень большой код получается, ведь планок может быть и 3 и 4, необходима проверка на количество строк и использование функции. Уверен, что есть способ проще, ведь я в скриптах новичок. Лазил во многих темах по форуму, всё очень расплывчато и не тот результат. Мне необходимо понимать текст программы для использования его в будущем.

Отправлено: 02:16, 27-11-2015

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Код: Выделить весь код
@echo OFF
SETLOCAL ENABLEDELAYEDEXPANSION
set mmr=0
for /f "skip=1 delims=" %%i in ('WMIC MemoryChip get BankLabel^,DeviceLocator^,PartNumber^,Speed^,Capacity') do (
for /f "tokens=1-5 delims=" %%A in ("%%i") do (
set BnkLbl=%%A
set Cpct=%%B
set DvcLctr=%%C
set PrtNmbr=%%D
set Spd=%%E
set /a mmr=!mmr!+1
echo Memory !mmr!: !BnkLbl! !DvcLctr! !PrtNmbr! !Spd! !Cpct!
))
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:09, 27-11-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо Elven, работает. Но осталась одна проблема, с которой в данном примере я совершенно не понимаю, как биться, всё из-за особенностей переменных в bat. Необходимо параметр Capacity перевести в удобной число, то бишь в гигабайты. set /a res=Cpct/1073741824+1. Как это сделать?, учитывая этот пример. Либо можно вывести отдельно, передать в файл и дописать в конец получившихся строк. Вроде бы несложно, но надо дописать соответствующий элемент в конец соответствующей строки. А я даже понятия не имею, как это осуществить. Посижу, подумаю, но если вы догадаетесь раньше, прошу напишите ответ.

Интересно ещё одно, если написать так:

@echo OFF
SETLOCAL ENABLEDELAYEDEXPANSION
set mmr=0
for /f "skip=1 delims=" %%i in ('WMIC MemoryChip get BankLabel^,DeviceLocator^,PartNumber^,Speed^,Capacity') do (
for /f "tokens=1-5 delims=" %%A in ("%%i") do (
set BnkLbl=%%A
set /a mmr=!mmr!+1
echo Memory !mmr!: !BnkLbl!
))

Вывод получится тем же. Он записывает в переменную всю строку, что не даёт работать с каждым отдельным её элементом.

Отправлено: 17:54, 27-11-2015 | #3


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


Цитата svoboda1984:
set /a res=Cpct/1073741824+1 »
2147483647 -- максимальное число для вычислений (2Гб - 1). Или получите ошибку:
Цитата:
Неверное число. Числа ограничены 32 битами точности.
Так что придется изобретать велосипед, считать по разрядам или вызывать внешние утилиты.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:17, 27-11-2015 | #4


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Foreigner, моё число - это и есть 2Гб -1, я проверял, всё вычисляет. Дело даже не в этом. У меня есть функция на JS, которая позволяет вычислять большие числа. Я не знаю, как это приспособить к строке наиболее эффективно, хотя некоторые догадки есть. Придётся записывать в файл данные из полученной информации без памяти, после считывать по строке и добавлять к ней искомые 2Гб.
Вот, кстати и код для вычислений больших чисел:

for /F "tokens=2 delims==" %%J in ('WMIC DiskDrive get Size /Value^|FindStr .') do set Num1=%%J
set Num2=1073741824
::set /p=%Num1% / %Num2%=<NUL
call :Math %Num1% / %Num2%
echo Size, Gb: %Result:~0,6%
:Math
if %2==/ call :_Math %~1 Div %~3& Exit /B
Exit /B
:_Math
set Result=& (For /F "delims=" %%a in ('cscript //nologo /e:jscript "%~f0" "%~1" "%~2" "%~3"') do set "Result=%%a"& Exit /B)& Exit /B
*/try {
switch (WScript.Arguments(1)) {
case "Div":
WScript.Echo (+WScript.Arguments(0) / +WScript.Arguments(2)); break;
}
} catch (e) { }

Отправлено: 21:52, 27-11-2015 | #5


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Фух, придумал. Есть недочёты, но на данном этапе это почти идеальный вариант.

for /F "tokens=2 delims==" %%J in ('WMIC MemoryChip get Capacity /Value^|FindStr .') do (
set A=%%J
set /a Res=A/1073741824+1
)
WMIC MemoryChip get BankLabel,DeviceLocator,PartNumber,Speed>>1.txt
for /F "delims=" %%J in ('find /c /v "" "1.txt"') do set n=%%J
set /a MIN=2
set /a MAX=%n:~18%
set /a CNT=1
set /a Num=1
for /F "tokens=*" %%J in ('type 1.txt') do (
if !CNT! GEQ %MIN% (
if !CNT! LEQ %MAX% echo Memory!Num!: %%JMhz %Res% Gb
)
set /a CNT=!CNT!+1
set /a Num=!CNT!-1
)
del 1.txt
pause

Отправлено: 00:37, 28-11-2015 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Работа с WMIC

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Нужна помощь с выгрузкой из WMIC 8ash8 Скриптовые языки администрирования Windows 16 19-02-2016 10:43
CMD/BAT - удаление программы с помощью wmic yagami Скриптовые языки администрирования Windows 1 22-04-2015 16:30
CMD/BAT - [решено] Запрос для wmic SANIOK_AV Скриптовые языки администрирования Windows 29 26-03-2014 19:27
Ошибка - Неизвестное исключительное состояние WMIC ZlojMyX Microsoft Windows 2000/XP 4 19-06-2012 10:08
WMIC. Добавление WinXP в домен Windows2003. posoh Microsoft Windows NT/2000/2003 1 23-11-2006 02:34




 
Переход