实验室中有50台计算机,每台计算机有两个磁盘和两个内存芯片。 每天我需要检查所有100个磁盘和内存芯片都没有被盗。 我计划通过两个步骤实现这一目标:
步骤1:编写一个记录磁盘数和内存芯片数的批处理文件。
我用以下脚本制作了它:
@echo off
echo >.\hardWareinfo.txt
(date/t & ipconfig & wmic cpu get name & wmic memorychip get capacity & wmic diskdrive get caption,size)>>.\hardWareinfo.txt
pause
它会生成一个包含以下内容的文本文件:
2018/04/05
Windows IP Configuration
Ethernet Adaptor:
DNS. . . . . . . :
IPV6 Address. . . . . . . . : fd80::aec3:fbdc:c5ae:119f%21
IPV4 Address. . . . . . . . : 192.168.1.100
Subnet Mask. . . . . . . . . . . . : 255.255.255.0
Default Gateway. . . . . . . . . . . . :192.168.1.1
N a m e I n t e l ( R ) C o r e ( T M ) i 5 - 7 4 0 0 C P U @ 3 . 0 0 G H z
C a p a c i t y
4 2 9 4 9 6 7 2 9 6
C a p t i o n S i z e
W D C W D 1 0 E Z E X - 7 5 W N 4 A 0 S C S I D i s k D e v i c e 1 0 0 0 2 0 2 2 7 3 2 8 0
第2步:将消息缩短为以下内容:
{Date:2018/04/05,hostIP:192.168.1.100,CPU:Intel i5-7400,memorySize: 4294967296,diskSize:1000202273280}
如何使用批处理文件完成此步骤?
答案 0 :(得分:1)
我不会使用(临时)文件,只需在内存中完成
将命令的输出变为变量的“通常”方式是for /f
循环
使用find
和适当的标记和分隔符进行Togheter,您可以非常精确地选择合适的子字符串。
我将它扩展了一点,以便使用多个网络适配器,Dimms和Disks。
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('date /t') do set "_dat=%%a"
for /f "tokens=2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set "_ip=!_ip!+%%a"
for /f "tokens=2 delims==" %%a in ('wmic cpu get name /value^|find "="') do set "_cpu=%%a"
for /f "tokens=2 delims==" %%a in ('wmic memorychip get capacity /value^|find "="') do set "_mem=!_mem!+%%a"
for /f "tokens=2 delims==" %%a in ('wmic diskdrive get caption^,size /value^|find "="') do set "_drv=!_drv!+%%a"
echo {Date:%_dat%,HostIP:%_ip:~1%,CPU:%_cpu%,MemSize:%_mem:~1%,DiskSize:%_drv:~1%}