Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - Получить название процессора

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


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

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


Приветствую участников форума!

Есть задача:

Имеется бат-файл типа: wmic cpu get name >cpu.txt
Задачу он свою выполняет. Сохраняет нужную мне информацию в текстовом файле. Но меня не устраивает кодировка получившегося текстовика (Юникод). Надо обычную Windows-кодировку.... И хотелось бы сделать его дополнительное редактирование прямо этим же батником: убрать верхнюю строчку и оставить только вторую. И третье условие: батник должен запускаться на многих машинах со съёмного жёсткого диска и сохрянять свой текстовик прямо на съмный носитель.

Текстовый файл, который получается:

Name
<cpuname>


Текстовый файл, который нужен:

<cpuname>

Т.е. командой батника необходимо убрать верхнюю строку текстового файла.

Надеюсь, понятно изложил суть проблемы... извиняюсь за корявость.... В программировании не особо разбираюсь. Жду помощи)

Отправлено: 12:03, 20-12-2010

 

Старожил


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

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


%PROCESSOR_IDENTIFIER% (но придётся пересчитывать Family-Model-Stepping в название)
или cpuz

Отправлено: 02:43, 21-12-2010 | #11



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

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


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


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

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


kiripanda, C:\Documents and Settings\Manager>%processor_identifier%
"x86" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

to ALL Существует команда dxdiag /t <имя_файла> в результате которой получается текстовый файл с полной информацией о системе. Как с помощью батника вытащить из него только нужные строки в отдельные текстовики с нужной кодировкой. Подскажите синтаксис команд. Мне бы принцип понять....

Последний раз редактировалось AD1DA5, 21-12-2010 в 11:40.


Отправлено: 11:31, 21-12-2010 | #12



Moderator


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

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


Цитата kiripanda:
C:\>wmic cpu get name
Name
Процессор Intel Pentium III Xeon
В наличии Intel Core 2 Duo E8300
Хотфикс KB953955
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:54, 21-12-2010 | #13


Старожил


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

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


AD1DA5
Код: Выделить весь код
dxdiag.exe /t dxdiag.tmp
findstr /c:Processor: dxdiag.tmp >cpu.txt
del dxdiag.tmp

echo %PROCESSOR_IDENTIFIER% >>cpu.txt

Petya V4sechkin, спасибо, получилось
Цитата:
C:\>wmic cpu get name
Name
Intel(R) Core(TM)2 Duo CPU E8300 @ 2.83GHz

Последний раз редактировалось kiripanda, 21-12-2010 в 20:07.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:19, 21-12-2010 | #14


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


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

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


kiripanda, Спасибо за разъяснение! Я уж и не думал, что на мою глупость ответят разумно :-)
Если Вам не сложно, ответьте, пожалуйста ещё на 4 вопроса:

1) Данный код может работать на компьютерах со съёмного носителя, если системный диск не "С"? Т.е. код универсален для любой машины и директории запуска батника?

2) Переменную идентификации процессора Вы указали. А можно узнать весь список переменных для dxdiag? Чтобы можно было узнать, например, инфо о видеокарте и других устройствах....

3) Запустив батник я обнаружил, что вместе с именем процессора там вписалось и ещё много мусора:
Processor: AMD Athlon(tm) XP 1800+, ~1.5GHz
x86 Family 6 Model 8 Stepping 1, AuthenticAMD

Можно оставить только: AMD Athlon(tm) XP 1800+, ~1.5GHz???

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

Заранее спасибо.

Последний раз редактировалось AD1DA5, 21-12-2010 в 23:18.


Отправлено: 22:57, 21-12-2010 | #15


Старожил


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

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


Код: Выделить весь код
@echo off
dxdiag.exe /t dxdiag.tmp

(
findstr /c:"       Machine name:" dxdiag.tmp
echo.
findstr /c:"   Operating System:" dxdiag.tmp
echo.
findstr /c:"System Manufacturer:" dxdiag.tmp
findstr /c:"       System Model:" dxdiag.tmp
echo.
findstr /c:"          Processor:" dxdiag.tmp
findstr /c:"             Memory:" dxdiag.tmp
echo.
findstr /c:"        Card name:" dxdiag.tmp
findstr /c:"   Display Memory:" dxdiag.tmp
findstr /c:"     Current Mode:" dxdiag.tmp
echo.
findstr /c:"      Drive:" dxdiag.tmp
findstr /c:"      Model:" dxdiag.tmp
) >"%COMPUTERNAME%.txt"

del dxdiag.tmp

Последний раз редактировалось kiripanda, 22-12-2010 в 02:01.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:48, 21-12-2010 | #16


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


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

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


kiripanda, Извиняюсь, что не совсем верно сформулировал вопросы.

Буду конкретен:

Надо извлечь информацию о следующих устройствах:

- Операционная система: "Windows Server 2003, Enterprise Edition (5.2, Build 3790) Service Pack 2"
- Версия БИОСа: "AWARD Modular BIOS v6.00PG"
- Процессор: "AMD Athlon(tm) XP 1800+, ~1.5GHz"
- Оперативная память: "2048MB RAM"
- Материнская плата : "<модель>"
- Видеокарта: "NVIDIA GeForce MX 440"
- Разрешение экрана: "1280 x 1024 (32 bit) (60Hz)"
- Жёсткий диск: "<HDD1>, <HDD2> .... <HDDn>" (в столбик)
- Привод: "<CDROM1>, <CDROM2> .... <CDROMn>" (в столбик)
- Сетевые карты: "<NET1>, <NET2> .... <NETn>" (в столбик)
- Звуковая карта: "<soundcard_name>"

Каждая из выше приведённых строчек должна писаться в отдельный текстовый файл с назначаемым мной именем в батнике (например: инфо о ЦП пишется в файл cpu.txt, а об оперативке в ram.txt и так далее).
Каждый такой текстовик должен содержать только одну строку с конкретной информацией о железке (как примеры в кавычках) или если устройств несколько, например, HDD, то в столбик.
Ну ещё не забыть про норм кодировку и автозамену старых файлов-отчётов новыми при каждом повторном запуске батника.
Батник должен работать на всех системах семейства Microsoft, начиная с Windows XP и кончая "Семёркой", не зависимо от битности.

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

Отправлено: 01:51, 22-12-2010 | #17


Аватара для El Sanchez

Ветеран


Contributor


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

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


AD1DA5, вариант скрипта, сохраняющего инфу в кодировке Windows-1251.
Код: Выделить весь код
@Echo Off
CHCP 866 >nul

For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC OS GET Caption^,CSDVersion /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Операционная система:	%%B, %%C" "			%%B, %%C" "_os.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC BIOS GET Manufacturer^,Name /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Версия БИОСа:		%%B, %%C" "			%%B, %%C" "_bios.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC CPU GET Name^,MaxClockSpeed /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Процессор:		%%C, %%B MHz" "			%%C, %%B MHz" "_cpu.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC COMPUTERSYSTEM GET TotalPhysicalMemory /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Оперативная память:	%%B bytes" "			%%B bytes" "_ram.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC BASEBOARD GET Manufacturer^,Product /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Материнская плата:	%%B, %%C" "			%%B, %%C" "_mb.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC path Win32_VideoController GET Name^,AdapterRAM /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Видеокарта:		%%C, %%B bytes RAM" "			%%C, %%B bytes RAM" "_video.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC path Win32_VideoController GET VideoModeDescription^,CurrentRefreshRate /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "Разрешение экрана:	%%C, %%B Hz" "			%%C, %%B Hz" "_screenres.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC DISKDRIVE Where InterfaceType^=^'IDE^' GET Model /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Жесткий диск:		%%B" "			%%B" "_hdd.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC path Win32_CDROMDrive GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Привод:			%%B" "			%%B" "_odd.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC path Win32_NetworkAdapter Where ^"AdapterTypeId^=0 And NetConnectionStatus^=2^" GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Сетевая карта:		%%B" "			%%B" "_net.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC path Win32_SoundDevice GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "Звуковая карта:		%%B" "			%%B" "_sound.txt"

GoTo :EOF

:_Func
	CHCP 1251 >nul
	If %~1 EQU 1 Echo.%~2 >%4
	If %~1 GTR 1 Echo.%~3 >>%4 
	CHCP 866 >nul
P.S. Скрипт обязательно сохранить в кодировке DOS(866), т.е. Notepad не канает.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:54, 24-12-2010 | #18


Ветеран


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

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


El Sanchez, а можно сделать с опросом всех компьютеров локальной сети и записью параметров в отдельную папку для каждой машины?

Отправлено: 16:04, 24-12-2010 | #19


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


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

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


El Sanchez, Класс! Отличный код. Но только мне пришлось его немного исправить под себя:
Код: Выделить весь код
@Echo Off
CHCP 866 >nul

For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC OS GET Caption^,CSDVersion /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "%%B, %%C" "%%B, %%C" "os.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC BIOS GET Manufacturer^,Name /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "%%B, %%C" "%%B, %%C" "bios.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC CPU GET Name^,MaxClockSpeed /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "%%C, %%B MHz" "%%C, %%B MHz" "cpu.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC COMPUTERSYSTEM GET TotalPhysicalMemory /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "%%B bytes" "%%B bytes" "ram.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC BASEBOARD GET Manufacturer^,Product /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "%%B, %%C" "%%B, %%C" "mb.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC path Win32_VideoController GET Name^,AdapterRAM /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "%%C, %%B bytes RAM" "%%C, %%B bytes RAM" "video.txt"
For /F "Tokens=1,3* Delims=,:" %%A In ('WMIC path Win32_VideoController GET VideoModeDescription^,CurrentRefreshRate /FORMAT:CSV^|FindStr .^|More +1^|FindStr /n .') Do Call :_Func "%%A" "%%C, %%B Hz" "%%C, %B Hz" "screenres.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC DISKDRIVE Where InterfaceType^=^'IDE^' GET Model /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "%%B" "%%B" "hdd.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC path Win32_CDROMDrive GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "%%B" "%%B" "odd.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC path Win32_NetworkAdapter Where ^"AdapterTypeId^=0 And NetConnectionStatus^=2^" GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "%%B" "%%B" "net.txt"
For /F "Tokens=1,3 Delims==:" %%A In ('WMIC path Win32_SoundDevice GET Name /VALUE^|FindStr .^|FindStr /n .') Do Call :_Func "%%A" "%%B" "%%B" "sound.txt"

GoTo :EOF

:_Func
	CHCP 1251 >nul
	If %~1 EQU 1 Echo.%~2 >%4
	If %~1 GTR 1 Echo.%~3 >>%4 
	CHCP 866 >nul
Мне не нужны были обозначения устройств на русском. А только сами устройства. Я не заморачивался с кодировкой исходного батника, но результируемые текстовики подошли! Список того, что получилось не так как надо:
1) список сетевых адаптеров не полон( У меня на тестовой машине их стоит 4 штуки... а скрипт выдал мне только одну реальную + Hamachi
2) в список видеокарточек затесался Radmin... не в тему...
3) объём памяти оперативки и видеокарточки в байтах... не особо наглядно, но скорее всего тут уж ничего не поделаешь. Придётся именно эту информацию брать по рецепту камрада kiripanda...
4) файл screenres.txt выглядит несколько странно:
Код: Выделить весь код
1280 x 1024 x 4294967296 цв., 60 Hz 
, B Hz
Напрягаяет наличие последней строки, не несущей никакого смысла.

Я не в коем случае не придираюсь. Просто стремлюсь подогнать код под свою сугубо специфическую задачу. Надеюсь на понимание.
El Sanchez, Если не сложно, поскажите какие изменения можно внести дополнительно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:25, 25-12-2010 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как получить название группы Администраторов в переменную. volk1234 Скриптовые языки администрирования Windows 24 02-04-2015 15:48
Подскажите название игры silalex Игры 1 06-05-2010 14:37
[решено] Название на ссылках MiXalich Хочу все знать 5 15-07-2008 15:33
название компьютера, где? slaine Microsoft Windows 95/98/Me (архив) 8 18-04-2006 17:31
Название дисков Falcon1 Microsoft Windows 2000/XP 6 07-06-2003 15:20




 
Переход