无忧启动论坛

标题: 批处理获取磁盘序列号和ID [打印本页]

作者: batche    时间: 2023-6-29 22:13
标题: 批处理获取磁盘序列号和ID
本帖最后由 batche 于 2023-6-30 14:49 编辑

用wimc获取磁盘序列号,使用diskpart获取磁盘序ID
  1. @echo off
  2. %~1mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~s0",":",,"runas",1)(window.close)&&exit
  3. for /f "skip=1 tokens=2-3" %%a in ('wmic diskdrive get BytesPerSector^,Index^,SerialNumber') do (
  4. echo,磁盘%%a 序列号:%%b
  5. (echo,select disk %%a
  6. echo,detail disk
  7. ) | diskpart | find /i "ID:"
  8. )
  9. pause
复制代码
补充一下:Win7通过wimc获取到的序列号是每两个字节经过小端排序的hex字符串,需要转码,我写了一个适用于win7的转码脚本
  1. @echo off
  2. for /f "skip=1 tokens=2-3" %%a in ('wmic diskdrive get BytesPerSector^,Index^,SerialNumber') do (
  3.     echo,磁盘%%a 序列号:
  4.     powershell -c "$hexBytes=[regex]::Matches(\"%%b\",\".{4}\");$reversedHexBytes=foreach($hexByte in $hexBytes){$swappedByte=$hexByte.Value.Substring(2,2)+$hexByte.Value.Substring(0,2);$swappedByte -split '(..)'|?{$_}|%%{[System.Convert]::ToInt16($_,16)}};$filteredHexBytes=$reversedHexBytes|?{$_ -ne 32};$result=[System.Text.Encoding]::Default.GetString($filteredHexBytes);$result" 2>nul
  5. )
  6. pause
复制代码



作者: yc2428    时间: 2023-6-29 23:04

谢谢分享
作者: conlin888    时间: 2023-6-29 23:35
懂得越多,头发掉越快!
作者: nttwqz    时间: 2023-6-29 23:42
这次没用python
作者: yyz2191958    时间: 2023-6-30 07:34
谢谢分享
作者: duhe303    时间: 2023-6-30 09:57
不错。。。。
作者: 旁观者清    时间: 2023-6-30 12:07
谢谢分享。
作者: 土著007    时间: 2023-6-30 13:03
win7下wimc获取的硬盘序列号需要转码 很麻烦
作者: batche    时间: 2023-6-30 13:06
土著007 发表于 2023-6-30 13:03
win7下wimc获取的硬盘序列号需要转码 很麻烦

是的,请问有什么好方法吗?
作者: wondaol    时间: 2023-6-30 14:38
我用物理方法,直接看硬盘
作者: conlin888    时间: 2023-6-30 15:28
使用万能的PECMD,

set DiskNo=0
for /f "delims=" %%i in ('call pecmd.exe "team part -devidx list disk %DiskNo%,v|mstr * v1,v2=<-1><-6>v|writ -,$,序列号:%%v1%% ID:%%v2%%"') do @echo %%i
pause
作者: smile_eer    时间: 2023-7-2 09:16
谢谢分享
作者: iaanqrm    时间: 2023-7-2 09:32

作者: unppnu    时间: 2023-7-2 09:48
谢谢分享。
作者: Aronnax    时间: 2023-7-2 15:21
感谢楼主分享!
作者: 创新科技2015    时间: 2023-7-10 22:39

谢谢分享
作者: 创新科技2015    时间: 2023-7-10 22:49
谢谢分享
作者: qingxuzhao    时间: 2023-7-11 11:01
感谢分享
作者: a2223843880    时间: 2023-7-11 17:30
感谢分享
作者: 2275385864    时间: 2023-7-17 22:48
以下是以前忘了哪里收藏的也是显示硬盘序列号的批处理

@echo off
cls
color 2f
echo.
echo.
echo.
:start
SetLocal EnableDelayedExpansion
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 >NUL 2>NUL&goto:start
call :Ascii4Sn ASN %sn%
echo 16进制序列号:%sn%
echo  硬盘序列号:%ASN%
pause
goto :eof
::函数
:SetAscVar        //定义数字和字母的ASCII变量,需要先调用
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

作者: plaodj    时间: 2023-7-22 19:50
懂得越多,头发掉越快!

作者: 创新科技2015    时间: 2023-7-30 16:17


谢谢分享
作者: xwuyun.cn    时间: 2023-8-8 10:19
谢谢分享
作者: chris4    时间: 2023-8-8 11:26
谢谢分享




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3