前言:市场部新入职一个同事,我帮忙给她重装电脑系统,公司有现成的 PE 启动盘,很丝滑地就装好了。市场部的电脑很旧了,只能装 win7 系统凑合用用。按照公司规定,装完系统还要记录一下设备的内网IP、MAC地址以及磁盘序列号。前两个不成问题,一个ipconfig/all
命令解决,没想到查个磁盘序列号倒难住我了,颇费一番周折,所以浅浅记录一下。
首先,批评一下这篇百度经验,win7怎么查看硬盘序列号,成功把人带进了沟里,但事实上磁盘ID和磁盘序列号(S/N)压根就不是一个概念,磁盘序列号出厂前就设定好了,而磁盘ID是操作系统分配的,只是磁盘的标识。
那么使用 wmic diskdrive get serialnumber
命令如何呢?在较新的系统上,能直接得到磁盘序列号。但在眼前这台装载Win7系统的电脑上,执行命令只得到一串40位16进制数:“2020202057202d44435732433045504c35434350”
其实这串数字就是磁盘序列号,但是还需要转换为ASCII码才可读。
找到一个大神写的bat脚本,在管理者模式下执行。
::测试环境Win7
@echo off
SetLocal EnableDelayedExpansion
chcp 65001
call :SetAscVar
::获取硬盘序列号(16进制)。可能有多块硬盘,显示中字母行“SerialNumber”,还有2行空行,需要先处理。
for /f %%x in ('"wmic diskdrive get serialnumber|find " "|find /v /i "SerialNumber""')do (
if not "%%x"=="" (
set/adn+=1
echo 硬盘!dn!:
call :Ascii4Sn ASN %%x
echo 16进制序列号:%%x
echo 硬盘序列号:!ASN!
echo\
)
)
pause
::测试
::对应序列号为WD-WCC2E0LPC5PC,WD是品牌名
set sn=2020202057202d44435732433045504c35434350
call :Ascii4Sn ASN %sn%
echo 16进制序列号:%sn%
echo 硬盘序列号:%ASN%
pause
goto :eof
::函数
::定义数字和字母的ASCII变量,需要先调用
:SetAscVar
set Num=0123456789
set Abc=ABCDEFGHIJKLMNOPQRSTUVWXYZ
set Hex=%Num%%Abc:~,6%
for /l %%i in (0 1 9)do set _0x3%%i=%%i
for /l %%i in (0 1 26)do call :AbcAsc %%i
goto :eof
:AbcAsc <offset>
::定义26个字母对应的ASCII变量
set/a Asc=0x41+%1,h=Asc/16,e=Asc%%16
set _0x!Hex:~%h%,1!!Hex:~%e%,1!=!Abc:~%1,1!
set/a as1=0x61+%1,h=as1/16,e=as1%%16
set _0x!Hex:~%h%,1!!Hex:~%e%,1!=!Abc:~%1,1!
goto :eof
:Ascii4Sn <str_var> <hexs>
::回传变量,长串16进制数
set hsn=%2
set ns=
set as=
:ASloop
set ns=%ns%%hsn:~2,2%%hsn:~,2%
set as=%as%!_0x%hsn:~2,2%!!_0x%hsn:~,2%!
set hsn=%hsn:~4%
if not "%hsn%"=="" goto :ASloop
set %1=%as%
goto :eof
最终得到想要的结果“WD-WCC2E0LPC5PC”。
当我在疯狂找解决方案的时候,妹子直接从满是灰尘的机箱里,把硬盘拆下来了。我一看,好家伙,磁盘序列号不就在硬盘标签上写着嘛!(lll¬ω¬)
咳咳!果然一力降十会啊,这才是查看硬盘序列号最简单的办法。
和脚本结果对比了一下,没啥问题。
最后提一下,其实很多软件,比如AIDA64、图吧工具箱,除了能查磁盘序列号还能查很多硬件信息,也很方便。无奈公司是保密单位,限制颇多,电脑连不了外网,也不能随便装软件,所以只能多走些弯路了。
❤️ 转载文章请注明出处,谢谢!❤️