标题: [文本处理] 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
- @echo off
- set info=互助互利,支付宝扫码头像,感谢打赏
- rem 有问题,可加QQ956535081及时沟通
- title %info%
- cd /d "%~dp0"
- for /f "delims=" %%a in ('wmic diskdrive get serialnumber /value^|find "="') do set %%a
- if not defined serialnumber (goto end)
- >"%tmp%\t.t" echo;WSH.echo(WSH.Arguments(0).replace(/../g,function(a){return String.fromCharCode('0x'+a)}))
- for /f "delims=" %%a in ('cscript -nologo -e:jscript "%tmp%\t.t" "%serialnumber%"') do set s=%%a
- setlocal enabledelayedexpansion
- (for /l %%a in (0 2 18) do (
- set t=!s:~%%a,2!
- set /p=!t:~-1!!t:~,1!
- ))<nul
- :end
- echo;%info%
- 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
- ::测试环境Win7
- @echo off
- 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
-
- set sn=32535554574e4741314134313532204a20202020
- 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
复制代码
作者: xczxczxcz 时间: 2019-9-8 18:10
win7 以上 试试这个,是不是你要的。复制代码
作者: WHY 时间: 2019-9-8 20:47
- @echo off
- setlocal enabledelayedexpansion
- set "SN=32535554574e4741314134313532204a20202020"
- for /L %%i in (0 4 36) do (
- set "s=!SN:~%%i,4!"
- for %%j in (2 0) do (
- set /a DEC = 0x!s:~%%j,2!
- cmd /c exit !DEC!
- set /p "=!=ExitCodeAscii!"
- )
- ) < nul
- pause
复制代码
- set "SN=32535554574e4741314134313532204a20202020"
- 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 |