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

[文件操作] [已解决]批处理获取硬盘序列号求解

本帖最后由 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只显示第二条的值,并且赋值给一个变量,各位达人这要怎么写

  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 中。

TOP

不知道为啥我这边加入查询别的代码时,会闪退,我再想想
谢谢了!

TOP

回复 2# wujunkai
又碰到问题了,这个方法只能得到第一块硬盘的序列号,多硬盘咋怎?

TOP

回复 4# testest


    多硬盘的话,你那条查询语句的结果是什么?
我没有多硬盘,不知道具体情况

TOP

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

TOP

感觉还是第三方工具grep容易筛选字符串

TOP

回复 4# testest


找一台多块硬盘的电脑
打开一个CMD窗口
执行命令:
wmic path Win32_PhysicalMedia get SerialNumber /value
把结果发出来看一下
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# wujunkai


  只能查询到第一块硬盘信息,如果没有多块硬盘,可以插U盘也可以测试

TOP

回复 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可以看到

TOP

回复 6# went
这个都会多一条空白结果,可否去除呢

TOP

回复 11# testest


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

TOP

回复 12# went
如何直接把序列号的值赋给变量呢,即不要前面的Disk_ID_

TOP

回复 13# testest

已经赋给变量了
变量名Disk_ID_1,Disk_ID_2
取值用%Disk_ID_1%,%Disk_ID_2%

TOP

很好,谢谢

TOP

返回列表