Board logo

标题: [文本处理] win7系统获取的40位硬盘序列号怎么转换为ASII码 [打印本页]

作者: chxw447    时间: 2019-9-6 18:21     标题: win7系统获取的40位硬盘序列号怎么转换为ASII码

用wmic diskdrive get serialnumber 获取到的序列号是40位的十六进制数,怎么转换成正确的asii码,另外如果是逐位转换好像和硬盘外面贴的序列号数字相同但是顺序不一样,哪位大神可以指点指点,直接使用批处理,不在使用其他程序
作者: Batcher    时间: 2019-9-6 18:33

请把你看到的以下三个字符串发出来,我看看有啥规律:
十六进制数
逐位转换
硬盘外面贴的序列号数字
作者: zaqmlp    时间: 2019-9-6 23:26

  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢打赏
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. cd /d "%~dp0"
  6. for /f "delims=" %%a in ('wmic diskdrive get serialnumber /value^|find "="') do set %%a
  7. if not defined serialnumber (goto end)
  8. >"%tmp%\t.t" echo;WSH.echo(WSH.Arguments(0).replace(/../g,function(a){return String.fromCharCode('0x'+a)}))
  9. for /f "delims=" %%a in ('cscript -nologo -e:jscript "%tmp%\t.t" "%serialnumber%"') do set s=%%a
  10. setlocal enabledelayedexpansion
  11. (for /l %%a in (0 2 18) do (
  12.     set t=!s:~%%a,2!
  13.     set /p=!t:~-1!!t:~,1!
  14. ))<nul
  15. :end
  16. echo;%info%
  17. pause
复制代码

作者: chxw447    时间: 2019-9-7 09:13

回复 2# Batcher


wmic diskdrive get serialnumber 获取的序列号    32535554574e4741314134313532204a20202020
逐位转码  2SUTWNGA1A4152 J
实际硬盘标签 S2TUNWAGA11425J
作者: chxw447    时间: 2019-9-7 09:22

回复 3# zaqmlp

多谢,支付宝已付,成功获取序列号,看起来好复杂,里面语句好多看不懂,能麻烦大神教教给个步骤注释什么的吗?
作者: chxw447    时间: 2019-9-7 10:49

回复 3# zaqmlp

为什么有的电脑上会出现
\t.t(1,53) Microsoft JScript 运行时错误:对象不支持此属性或方法
的错误,获取不到序列号
作者: cutebe    时间: 2019-9-8 16:13

  1. ::测试环境Win7
  2. @echo off
  3. SetLocal EnableDelayedExpansion
  4. call :SetAscVar
  5. ::获取硬盘序列号(16进制)。可能有多块硬盘,显示中字母行“SerialNumber”,还有2行空行,需要先处理。
  6. for /f %%x in ('"wmic diskdrive get serialnumber|find " "|find /v /i "SerialNumber""')do (
  7. if not "%%x"=="" (
  8. set/adn+=1
  9. echo 硬盘!dn!:
  10. call :Ascii4Sn ASN %%x
  11. echo 16进制序列号:%%x
  12. echo  硬盘序列号:!ASN!
  13. echo\
  14. )
  15. )
  16. pause
  17. set sn=32535554574e4741314134313532204a20202020
  18. call :Ascii4Sn ASN %sn%
  19. echo 16进制序列号:%sn%
  20. echo  硬盘序列号:%ASN%
  21. pause
  22. goto :eof
  23. ::函数
  24. :SetAscVar //定义数字和字母的ASCII变量,需要先调用
  25. set Num=0123456789
  26. set Abc=ABCDEFGHIJKLMNOPQRSTUVWXYZ
  27. set Hex=%Num%%Abc:~,6%
  28. for /l %%i in (0 1 9)do set _0x3%%i=%%i
  29. for /l %%i in (0 1 26)do call :AbcAsc %%i
  30. goto :eof
  31. :AbcAsc <offset> //定义26个字母对应的ASCII变量
  32. set/a Asc=0x41+%1,h=Asc/16,e=Asc%%16
  33. set _0x!Hex:~%h%,1!!Hex:~%e%,1!=!Abc:~%1,1!
  34. set/a as1=0x61+%1,h=as1/16,e=as1%%16
  35. set _0x!Hex:~%h%,1!!Hex:~%e%,1!=!Abc:~%1,1!
  36. goto :eof
  37. :Ascii4Sn <str_var> <hexs> //回传变量,长串16进制数
  38. set hsn=%2
  39. set ns=
  40. set as=
  41. :ASloop
  42. set ns=%ns%%hsn:~2,2%%hsn:~,2%
  43. set as=%as%!_0x%hsn:~2,2%!!_0x%hsn:~,2%!
  44. set hsn=%hsn:~4%
  45. if not "%hsn%"=="" goto :ASloop
  46. set %1=%as%
  47. goto :eof
复制代码

作者: xczxczxcz    时间: 2019-9-8 18:10

win7 以上 试试这个,是不是你要的。
  1. (get-disk).SerialNumber
复制代码

作者: WHY    时间: 2019-9-8 20:47

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "SN=32535554574e4741314134313532204a20202020"
  4. for /L %%i in (0 4 36) do (
  5.     set "s=!SN:~%%i,4!"
  6.     for %%j in (2 0) do (
  7.         set /a DEC = 0x!s:~%%j,2!
  8.         cmd /c exit !DEC!
  9.         set /p "=!=ExitCodeAscii!"
  10.     )
  11. ) < nul
  12. pause
复制代码
  1. set "SN=32535554574e4741314134313532204a20202020"
  2. PowerShell "[regex]::replace('%SN%', '(..)(..)', {param($m); [char][int]('0x'+$m.Groups[2].Value)+[char][int]('0x'+$m.Groups[1].Value)})"
复制代码

作者: chxw447    时间: 2019-9-9 16:55

回复 7# cutebe
感谢大神指导,试了好几个电脑发现一个问题
纯数字字母的序列号获取的和硬盘标签上一致,但有的序列号里面有“-”,就把这个“-”
给去点了,例如标签上序列号为WD-WCC3F5XKCYNX
用批处理获取的是WDWCC3F5XKCYNX




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2