Board logo

标题: [文件操作] [已解决]批处理获取硬盘序列号求解 [打印本页]

作者: testest    时间: 2020-3-17 12:54     标题: [已解决]批处理获取硬盘序列号求解

本帖最后由 testest 于 2020-5-13 21:37 编辑

网络上查了下,用bat获取硬盘序列号
1
  1. wmic diskdrive get serialnumber
复制代码
此命令,无法在XP系统执行,且在win7执行结果是
V6NM3V55
,和用AIDA64查的结果不一样,放弃
2
  1. wmic path Win32_PhysicalMedia get SerialNumber
复制代码
此命令,可以在XP系统执行,也可以在win7执行结果是
6VMNV355
,和用AIDA64查的结果一样

现在,我想用bat只显示第二条的值,并且赋值给一个变量,各位达人这要怎么写
作者: wujunkai    时间: 2020-3-17 13:44

  1. @echo off
  2. call:get_ID
  3. echo %ID%
  4. goto:eof
  5. :get_ID
  6.     for /F "skip=1" %%i in ('wmic path Win32_PhysicalMedia get SerialNumber') do (
  7.         set ID=%%i
  8.         goto:eof
  9.     )
  10. goto:eof
复制代码
因为实际上它显示的是三行,而且bat好像禁用了break,所以只好使用 goto:eof 来中断。
当需要获取磁盘序列号的时候 call:get_ID ,返回值储存在 ID 中。
作者: testest    时间: 2020-3-17 15:14

不知道为啥我这边加入查询别的代码时,会闪退,我再想想
谢谢了!
作者: testest    时间: 2020-5-12 00:16

回复 2# wujunkai
又碰到问题了,这个方法只能得到第一块硬盘的序列号,多硬盘咋怎?
作者: wujunkai    时间: 2020-5-12 06:43

回复 4# testest


    多硬盘的话,你那条查询语句的结果是什么?
我没有多硬盘,不知道具体情况
作者: went    时间: 2020-5-12 08:32

Disk_ID_序号
我是一块固态,一块机械
  1. @echo off
  2. set "index=0"
  3. for /f "skip=1 delims=" %%a in ('wmic path Win32_PhysicalMedia get SerialNumber') do (
  4. set /a "index+=1"
  5. call set "Disk_ID_%%index%%=%%a"
  6. )
  7. set Disk_ID_
  8. pause&exit
复制代码

作者: xp3000    时间: 2020-5-12 08:48

感觉还是第三方工具grep容易筛选字符串
作者: Batcher    时间: 2020-5-12 09:42

回复 4# testest


找一台多块硬盘的电脑
打开一个CMD窗口
执行命令:
wmic path Win32_PhysicalMedia get SerialNumber /value
把结果发出来看一下
作者: testest    时间: 2020-5-12 11:02

回复 5# wujunkai


  只能查询到第一块硬盘信息,如果没有多块硬盘,可以插U盘也可以测试
作者: testest    时间: 2020-5-12 11:09

回复 8# Batcher
  1. C:\Users\Administrator>wmic path Win32_PhysicalMedia get SerialNumber /value
  2. SerialNumber=            6VMNV355
  3. SerialNumber=4C530000211222118175
  4. SerialNumber=
复制代码
老大也来了,其中4C530000211222118175为U盘的序列号
我再多说一个很奇怪的想象,今天在另外一台XP系统,执行上面的命令,显示的结果是
  1. SerialNumber=
复制代码
,没有看到任何信息,如果说是因为这个硬盘没有序列号,也不可能啊,我用AIDA64可以看到
作者: testest    时间: 2020-5-12 11:10

回复 6# went
这个都会多一条空白结果,可否去除呢
作者: went    时间: 2020-5-12 12:13

回复 11# testest


有的磁盘没有序列号
你要是不需要空白序列号,可以改成
  1. "eol= skip=1 delims="
复制代码

作者: testest    时间: 2020-5-13 00:22

回复 12# went
如何直接把序列号的值赋给变量呢,即不要前面的Disk_ID_
作者: went    时间: 2020-5-13 10:12

回复 13# testest

已经赋给变量了
变量名Disk_ID_1,Disk_ID_2
取值用%Disk_ID_1%,%Disk_ID_2%
作者: testest    时间: 2020-5-13 21:37

很好,谢谢




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