![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Работа с WMIC |
|
CMD/BAT - [решено] Работа с WMIC
|
Новый участник Сообщения: 10 |
Здраствуйте. Нуждаюсь в помощи. С помощью 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 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить 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
|
Профиль | Отправить 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
|
Цитата svoboda1984:
Цитата:
|
||
Отправлено: 19:17, 27-11-2015 | #4 |
Новый участник Сообщения: 10
|
Профиль | Отправить 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
|
Профиль | Отправить 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|