[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

TOP

  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)})"
复制代码

TOP

win7 以上 试试这个,是不是你要的。
  1. (get-disk).SerialNumber
复制代码
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

  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
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 3# zaqmlp

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

TOP

回复 3# zaqmlp

多谢,支付宝已付,成功获取序列号,看起来好复杂,里面语句好多看不懂,能麻烦大神教教给个步骤注释什么的吗?

TOP

回复 2# Batcher


wmic diskdrive get serialnumber 获取的序列号    32535554574e4741314134313532204a20202020
逐位转码  2SUTWNGA1A4152 J
实际硬盘标签 S2TUNWAGA11425J

TOP

  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
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

请把你看到的以下三个字符串发出来,我看看有啥规律:
十六进制数
逐位转换
硬盘外面贴的序列号数字
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表