中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]征寻统计计算机硬件配置的脚本?
作者:
标题: [求助]征寻统计计算机硬件配置的脚本? 上一主题 | 下一主题
szww
初级用户





积分 59
发帖 28
注册 2007-3-23
状态 离线
『楼 主』:  [求助]征寻统计计算机硬件配置的脚本?

想要实现收集计算机主要硬件指标的脚本:
主要包括
CPU: 内存,硬盘,光驱有无
主机名,IP地址及网关,DNS等。

后面的用ipconfig /all 2>nul | findstr "ip gatewar dns" >result.txt 能比较容易实现,但前面的一些硬件设备信息不知有无高人实现。
我使用了一些VBS脚本,但内容过于冗长。。。。。


力求结果精简明了。

2008-8-19 18:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 2 楼』:  

硬件指标。。。?说得太过模糊了。



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-8-19 19:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 3 楼』:  

systeminfoXXX?

2008-8-19 19:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

转帖
@echo off
color 0a
title    硬件检测      
mode con cols=90
sc config  winmgmt start= auto >nul 2<&1
net start winmgmt 2>1nul
setlocal  ENABLEDELAYEDEXPANSION
echo 主版:
for /f "tokens=1,* delims==" %%a in ('wmic BASEBOARD get Manufacturer^,Product^,Version^,SerialNumber /value') do (
    set /a tee+=1
    if "!tee!" == "3" echo      制造商  = %%b
    if "!tee!" == "4" echo      型  号  = %%b
    if "!tee!" == "5" echo      序列号  = %%b
    if "!tee!" == "6" echo      版  本  = %%b
)
set tee=0
echo      BIOS:
for /f "tokens=1,* delims==" %%a in ('wmic bios  get

CurrentLanguage^,Manufacturer^,SMBIOSBIOSVersion^,SMBIOSMajorVersion^,SMBIOSMinorVersion^,ReleaseDate /value') do (
    set /a tee+=1
    if "!tee!" == "3" echo      当前语言 = %%b
    if "!tee!" == "4" echo      制造商  = %%b
    if "!tee!" == "5" echo      发行日期 = %%b
    if "!tee!" == "6" echo      版  本  = %%b
    if "!tee!" == "7" echo      SMBIOSMajorVersion = %%b
    if "!tee!" == "8" echo      SMBIOSMinorVersion = %%b
)
set tee=0
echo.
echo CPU:
for /f "tokens=1,* delims==" %%a in ('wmic cpu get name^,ExtClock^,CpuStatus^,Description /value') do (
    set /a tee+=1
    if "!tee!" == "3" echo      CPU个数  = %%b
    if "!tee!" == "4" echo      处理器版本  = %%b
    if "!tee!" == "5" echo      外  频  = %%b
    if "!tee!" == "6" echo      名称及主频率  = %%b
)
set tee=0
echo.
echo 显示器:
for /f "tokens=1,* delims==" %%a in ('wmic DESKTOPMONITOR  get name^,ScreenWidth^,ScreenHeight^,PNPDeviceID /value') do (
    set /a tee+=1
    if "!tee!" == "3" echo      类    型  = %%b
    if "!tee!" == "4" echo      其他信息  = %%b
    if "!tee!" == "5" echo      屏幕高    = %%b
    if "!tee!" == "6" echo      屏幕宽    = %%b
)
set tee=0
echo.
echo 硬  盘:
for /f "tokens=1,* delims==" %%a in ('wmic DISKDRIVE get model^,interfacetype^,size^,totalsectors^,partitions /value') do (
    set /a tee+=1
    if "!tee!" == "3" echo      接口类型  = %%b
    if "!tee!" == "4" echo      硬盘型号  = %%b
    if "!tee!" == "5" echo      分区数    = %%b
    if "!tee!" == "6" echo      容    量  = %%b
    if "!tee!" == "7" echo      总扇区    = %%b
)
echo 分区信息:
wmic LOGICALDISK  where mediatype='12' get description,deviceid,filesystem,size,freespace
set tee=0
echo.
echo 网  卡:
for /f "tokens=1,* delims==" %%a in ('wmic NICCONFIG where "index='1'" get ipaddress^,macaddress^,description /value') do (
    set /a tee+=1
    if "!tee!" == "3" echo      网卡类型  = %%b
    if "!tee!" == "4" echo      网卡IP    = %%b
    if "!tee!" == "5" echo      网卡MAC  = %%b
)
set tee=0
echo.
echo 打印机:
for /f "tokens=1,* delims==" %%a in ('wmic PRINTER get caption /value') do (
    set /a tee+=1
    if "!tee!" == "3" echo      打印机名字  = %%b
)
set tee=0
echo.
echo 声  卡:
for /f "tokens=1,* delims==" %%a in ('wmic SOUNDDEV get name^,deviceid /value') do (
    set /a tee+=1
    if "!tee!" == "3" echo      其他信息  = %%b
    if "!tee!" == "4" echo      型    号  = %%b
)
set tee=0
echo.
echo 内    存:
for /f "tokens=1,* delims==" %%a in ('systeminfo^|find "内存"') do (
    echo        %%a 4534 %%b
)
echo.
echo 显    卡:
del /f "%TEMP%\temp.txt" 2>nul
dxdiag /t %TEMP%\temp.txt
:显卡
rem 这里需要30秒左右!
if EXIST "%TEMP%\temp.txt" (
    for /f "tokens=1,2,* delims=:" %%a in ('findstr /c:" Card name:" /c:"Display Memory:" /c:"Current Mode:" "%TEMP%\temp.txt"') do (
        set /a tee+=1
        if !tee! == 1 echo    显卡型号: %%b
        if !tee! == 2 echo    显存大小: %%b
        if !tee! == 3 echo    当前设置: %%b
)  ) else (
    ping /n 2 127.1>nul
    goto 显卡
)
set /p var=需要额外信息吗(y/n):
if /i %var% == y notepad "%TEMP%\temp.txt"
del /f "%TEMP%\temp.txt" 2>nul
pause




2008-8-19 20:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
szww
初级用户





积分 59
发帖 28
注册 2007-3-23
状态 离线
『第 5 楼』:  

非常感谢楼上HAT 提供如此精彩的脚本。
略显遗憾,程序执行时间较长。因为我设置的是域关机脚本,不想让大家感觉关机时间过长。
先试试添加IP等其他信息的搜集,的确比较完美了。

2008-8-20 09:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
szww
初级用户





积分 59
发帖 28
注册 2007-3-23
状态 离线
『第 6 楼』:  

在下面一行,我加入输出到文本文件后,出现输入编码及格式错误。不知有没有办法解决。(不输出到文本文件,在屏幕显示内容及格式正常)
wmic LOGICALDISK  where mediatype='12' get description,deviceid,filesystem,size,freespace >> c:\%computername%.txt

结果如下(在记事本中打开有乱码且没有分行):

分区信息:
D e s c r i p t i o n       D e v i c e I D     F i l e S y s t e m     F r e e S p a c e       S i z e                     

,g0W鶹歔義豽    C :                 N T F S                 2 3 6 9 6 8 7 5 5 2     1 2 5 8 4 6 4 4 6 0 8      

,g0W鶹歔義豽    D :                 N T F S                 4 3 3 9 7 4 0 6 7 2     4 4 7 6 1 9 3 9 9 6 8      

,g0W鶹歔義豽    E :                 N T F S                 4 3 7 2 0 2 1 2 4 8     1 0 2 6 9 2 5 8 5 4 7 2

[ Last edited by szww on 2008-8-20 at 10:55 AM ]

2008-8-20 10:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 7 楼』:  

编码格式问题了。

检查你计算机的编码格式,本机上修正就可以了。



知,不觉多。不知,乃求知
2008-8-20 10:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
szww
初级用户





积分 59
发帖 28
注册 2007-3-23
状态 离线
『第 8 楼』:  

同样的vmic输出,其他的编码格式是正常的,却唯独这里不匹配!?
在代码中如何修改以纠正呢?

2008-8-20 14:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 9 楼』:  

D e s c r i p t i o n       D e v i c e I D     F i l e S y s t e m     F r e e S p a c e       S i z e
这里可能是 unicode 编码格式

但你在显示器上应该显示的是:Description   DeviceID  FileSystem  FreeSpace    Size

你把代码页改成 chcp 936 试下?



知,不觉多。不知,乃求知
2008-8-20 15:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
szww
初级用户





积分 59
发帖 28
注册 2007-3-23
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by flyinspace at 2008-8-20 03:00 PM:
D e s c r i p t i o n       D e v i c e I D     F i l e S y s t e m     F r e e S p a c e       S i z e
这里可能是 unicode 编码格式

但你在显示器上应该显示的是:Descriptio ...

具体是指在我的BAT中设置代码还是在显示的程序中,确实不懂如何设置啊?

不知与语言版本是否有关系。
当前语言 = n|US|iso8859-1

[ Last edited by szww on 2008-8-20 at 04:26 PM ]

2008-8-20 16:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
szww
初级用户





积分 59
发帖 28
注册 2007-3-23
状态 离线
『第 11 楼』:  

上面的脚本取的CPU个数值意义不大,但对是否为双核  不知能否判断!

[ Last edited by szww on 2008-8-21 at 11:45 AM ]

2008-8-21 11:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 12 楼』:  

%NUMBER_OF_PROCESSORS%判断几个cpu呀。

你把语言设置为 简体中文吧。



知,不觉多。不知,乃求知
2008-8-21 15:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 13 楼』:  

%NUMBER_OF_PROCESSORS%在单个双核CPU系统中的值是2
它不能判断物理CPU的个数



2008-8-21 15:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
szww
初级用户





积分 59
发帖 28
注册 2007-3-23
状态 离线
『第 14 楼』:  

谢谢,已经用变量实现内核数量输出。
但仍然有以下两个bug:
1、那行乱码始终无法解决,不知何故!

尝试了用437、850 和936都无法将结果{本地固定磁盘} 正常输出到TXT,其中仍然显示乱码{鶹歔義豽},但在DOS下ECHO输出唯有936下正常??????

chcp 437>nul
850
936

2、在多网卡的电脑中,无法使用index号来对当前启用的网卡进行查询,导致有时无法取到正确的IP信息。不知有没更好的办法!

[ Last edited by szww on 2008-8-21 at 06:00 PM ]

2008-8-21 16:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: