PDA

Показать полную графическую версию : Получить название процессора


Страниц : [1] 2

AD1DA5
20-12-2010, 12:03
Приветствую участников форума!

Есть задача:

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

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

Name
<cpuname>

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

<cpuname>

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

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

gora
20-12-2010, 12:12
Попробуйте так:
For /F "tokens=* delims=" %%j In ('wmic cpu get name') Do Echo %%j>cpu.txt

AD1DA5
20-12-2010, 12:29
Попробуйте так:
Код:
For /F "tokens=* delims=" %%j In ('wmic cpu get name') Do Echo %%j>cpu.txt »

Спасибо! Приду домой попробую. А какой именно параметр данного кода отвечает за кодировку? чтобы можно было поиграться ещё самому и не задавать лишних вопросов....

gora
20-12-2010, 12:40
А какой именно параметр данного кода отвечает за кодировку? »
В коде не специального параметра влияющего на кодировку выходного файла. Просто используется не вывод самой команды wmic, а вывод встроенной команды Echo (cmd.exe). cmd.exe выводит в "своей" кодировке кириллица DOS (866), но т.к. кириллицы в выводе нет, то можете считать ее за ...обычную Windows-кодировку »

El Sanchez
20-12-2010, 13:49
gora, он хочет, чтобы на выходе получился файл, кодировка которого ANSI(1251). C вашего позволения:

@Echo Off
For /F "Tokens=2 Delims==" %%J In ('WMIC CPU Get Name /Value^|FindStr .') Do Call :Convert "%%J"
CHCP 866 >nul
GoTo :EOF

:Convert
CHCP 1251 >nul
Echo.%~1>cpu.txt

gora
20-12-2010, 13:56
он хочет, чтобы на выходе получился файл, кодировка которого ANSI(1251). »
Я это понял. А теперь сравните полученные cpu.txt Ваш файл и мой, есть разница в кодировке? ;)

El Sanchez
20-12-2010, 16:14
есть разница в кодировке? »
У меня есть: ваш в досовской, мой в виндовой :yes:

AD1DA5
20-12-2010, 22:39
И вот я наконец-то дома)

gora, Я проверил Ваш код на 3-х машинах. На первой всё получилось просто отлично! Я даже обрадовался тому, что всё получилось без использования команд конвертирования. Но попробовав ещё на двух увидел кракозябры. На одном под кракозябрами скрывалось название процессора, а на другом такая строчка: Режим вывода команд на экран (ECHO) включен. Переводил шрифтом Terminal. В чём может быть причина такой непостоянности?

El Sanchez, Ваш код пробовал пока только на одной машине (на своей) и о чудо! Нужная мне программа скушала полученный файл! Зе бест! Завтра попробую испытать ещё на паре компов. И ещё один вопрос: Можно ли используя Ваш код создать один файл .bat по такому же принципу получая информацию о других железках? (например: инфо о cpu в один файл сохранялась, о материнке в другой, но команды шли от одного батника)

PS: Как здесь благодарности раздаются?

kiripanda
21-12-2010, 01:06
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\>wmic cpu get name
Name
Процессор Intel Pentium III Xeon

В наличии Intel Core 2 Duo E8300

AD1DA5
21-12-2010, 02:23
kiripanda, Интересно... Но другого способа вытаскивания из cmd информации о системе вроде как нет...

kiripanda
21-12-2010, 02:43
%PROCESSOR_IDENTIFIER% (но придётся пересчитывать Family-Model-Stepping в название)
или cpuz

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

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

Petya V4sechkin
21-12-2010, 13:54
C:\>wmic cpu get name
Name
Процессор Intel Pentium III Xeon
В наличии Intel Core 2 Duo E8300
Хотфикс KB953955 (http://support.microsoft.com/kb/953955/en-us)

kiripanda
21-12-2010, 19:19
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

AD1DA5
21-12-2010, 22:57
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) Можно будет добавить в этот код ещё несколько переменных, чтобы не создавать отдельный батник для каждого устройства?

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

kiripanda
21-12-2010, 23:48
@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

AD1DA5
22-12-2010, 01:51
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 и кончая "Семёркой", не зависимо от битности.

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

El Sanchez
24-12-2010, 11:54
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 не канает.

sov44
24-12-2010, 16:04
El Sanchez, а можно сделать с опросом всех компьютеров локальной сети и записью параметров в отдельную папку для каждой машины?

AD1DA5
25-12-2010, 02:25
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, Если не сложно, поскажите какие изменения можно внести дополнительно.




© OSzone.net 2001-2012