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

[文本处理] [已解决]如何使用批处理获得特定卷标的分区,它所在的硬盘序号?

本帖最后由 5i365 于 2021-8-7 09:42 编辑

例如,我想知道电脑所有硬盘上卷标为ssd1的分区, 它所在的硬盘序号, 目前本人只能手动输入命令, 从输出的信息中去判断, 想知道能否使用批处理来实现, 恳请诸位大侠支招, 非常感谢
另外,如果有多个卷标为ssd1的分区,只处理第一个

也有可能, 还有更简单的其它方式来实现, 同样欢迎各位交流讨论

手动操作的详细步骤:
1.Win+R输入cmd回车, 进入命令行, 然后输入diskpart 进入命令

2.输入list disk 回车,会列出电脑上所有的硬盘, 在显示的列表信息中  ###下面就是硬盘的序号, 我的电脑当前有两个硬盘, 所以显示了, 磁盘 0 磁盘 1

3.输入select disk 0 进入磁盘0

4.输入detail disk 显示磁盘0的所有详细信息, 其中,  【标签】的下面就是这个硬盘所包含的所有分区的卷标
信息中显示:
磁盘0有3个区, 分区的卷标, 分别为nvme1  nvme2  EFI
并没有我要找的卷标ssd1的分区, 所以继续向下操作

5.输入select disk 1 进入磁盘1

6.输入detail disk 显示磁盘1的所有详细信息, 其中,  【标签】的下面就是这个硬盘所包含的所有分区的卷标
信息中显示:
磁盘1有3个区, 分区的卷标, 分别为ssd1  ssd2  EFI
里面有我要找的卷标ssd1的分区, 所以不再继续向下操作, 我得出结论: 标卷为ssd1的分区, 它所在的硬盘序号是1

提醒:
上面的命令中,想得到每个硬盘的详情,可以将相应的命令保存在一个文件【如d0.txt】中, 然后使用下面的方式执行获得磁盘0详情, 其它磁盘也一样
例如, 我把如下的获取磁盘0详情的命令保存为d0.txt
list disk
select disk 0
detail disk
然后在批处理中执行下面命令,详情会输出到d0_info.txt
diskpart /s d0.txt >d0_info.txt
当然后也可以将d0.txt也可直接用命令生成,例如:
(echo, list disk
echo, select disk 0
echo, detail disk)>d0.txt
diskpart /s d0.txt >d0_info.txt

自己百度找到获取当前电脑硬盘数量的批处理代码:
  1. @echo off
  2. cd.>script.txt
  3. >>script.txt echo list disk
  4. for /f %%i in ('diskpart /s script.txt^|find /c ^"联机^"') do Set HardDrivers=%%i
  5. ::del script.txt /q
  6. echo 您的计算机上硬盘安装数量为:%HardDrivers%
  7. pause
复制代码
手动输入命令, 从输出的信息中去判断,完整操作的详情如下:
  1. X:\Users\Administrator>diskpart
  2. Microsoft DiskPart 版本 10.0.19041.1
  3. Copyright (C) Microsoft Corporation.
  4. 在计算机上: WinPE
  5. DISKPART> list disk
  6.   磁盘 ###  状态           大小     可用     Dyn  Gpt
  7.   --------  -------------  -------  -------  ---  ---
  8.   磁盘 0    联机              465 GB    50 GB        *
  9.   磁盘 1    联机              465 GB    83 GB        *
  10. DISKPART> select disk 0
  11. 磁盘 0 现在是所选磁盘。
  12. DISKPART> detail disk
  13. Samsung SSD 850 EVO 500GB
  14. 磁盘 ID: {5B30C043-F56D-11EB-8B35-F803154EB4DB}
  15. 类型   : SATA
  16. 状态 : 联机
  17. 路径   : 1
  18. 目标 : 0
  19. LUN ID : 0
  20. 位置路径 : PCIROOT(0)#PCI(1C03)#PCI(0000)#ATA(C01T00L00)
  21. 当前只读状态: 否
  22. 只读: 否
  23. 启动磁盘: 否
  24. 页面文件磁盘: 否
  25. 休眠文件磁盘: 否
  26. 故障转储磁盘: 否
  27. 群集磁盘  : 否
  28.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  29.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  30.   卷     0     G   nvme1          NTFS   磁盘分区          80 GB  正常
  31.   卷     1     H   nvme2         NTFS   磁盘分区         284 GB  正常
  32.   卷     2         EFI          FAT32  磁盘分区        1027 MB  正常         已隐藏
  33. DISKPART> select disk 1
  34. 磁盘 1 现在是所选磁盘。
  35. DISKPART> detail disk
  36. KINGSTON SA2000M8500G
  37. 磁盘 ID: {33E8B399-451F-43F3-BB00-A1116C0B80AE}
  38. 类型   : NVMe
  39. 状态 : 联机
  40. 路径   : 0
  41. 目标 : 0
  42. LUN ID : 0
  43. 位置路径 : PCIROOT(0)#PCI(0100)#PCI(0000)#NVME(P00T00L00)
  44. 当前只读状态: 否
  45. 只读: 否
  46. 启动磁盘: 否
  47. 页面文件磁盘: 否
  48. 休眠文件磁盘: 否
  49. 故障转储磁盘: 否
  50. 群集磁盘  : 否
  51.   卷 ###      LTR  标签         FS     类型        大小     状态       信息
  52.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  53.   卷     3     C   ssd1          NTFS   磁盘分区          80 GB  正常
  54.   卷     4     D   ssd2         NTFS   磁盘分区         264 GB  正常
  55.   卷     5         EFI          FAT32  磁盘分区        1027 MB  正常         已隐藏
  56. DISKPART>
复制代码

本帖最后由 newswan 于 2021-8-5 19:33 编辑

wmic 方便一些,用 diskpart 麻烦
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set _label_=New Volume
  4. for /f "usebackq tokens=2 delims==" %%a in (`
  5.     wmic logicaldisk where ^(VolumeName^='%_label_%'^) get name /value
  6. `) do (
  7.     if not defined _letter_ (set _letter_=%%a)
  8. )
  9. echo %_letter_%
  10. for /f "usebackq tokens=3 delims==" %%a in (`
  11.     wmic path Win32_LogicalDiskToPartition.Dependent^='Win32_LogicalDisk.DeviceID^="%_letter_%"' get Antecedent /value
  12. `) do (
  13.     set _dp_=%%a
  14.     set _dp_=!_dp_:""="%!
  15. )
  16. echo %_dp_%
复制代码
1

评分人数

TOP

pe下?支持wmic吗?

TOP

本帖最后由 5i365 于 2021-8-6 08:13 编辑

回复 2# newswan


    你好, 感谢支招,上面代码在win7下运行是OK的, 没有这一行,不行 setlocal ENABLEDELAYEDEXPANSION

TOP

本帖最后由 5i365 于 2021-8-6 08:14 编辑

回复 3# newswan


    对, 刚刚在WIN下试的,

在PE下测试,不行, 显示下面的错误

节点 - Winpe
错误:
描述 = 常规故障
ECHO 处于关闭状态。
没有可用实例。
ECHO 处于关闭状态。
请按任意键继续.

TOP

回复 5# 5i365


那么,你的pe里有没有 findstr  ,或者 sed grep awk

TOP

回复 6# newswan


     findstr 这个好像可以执行

TOP

第二句是为了提权,如果是PE环境下可以删掉
vol是查找的卷标
  1. @echo off & cd /d "%~dp0"
  2. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
  3. set "diskNo=-1"
  4. set "vol=Win10"
  5. for /l %%i in (0,1,10) do (
  6. (
  7. echo select disk %%i
  8. echo detail disk
  9. ) | diskpart | findstr /i /C:" %vol% " >nul 2>nul && (
  10. set "diskNo=%%i"
  11. goto :next
  12. )
  13. )
  14. :next
  15. echo %diskNo%
  16. pause&exit
复制代码

TOP

TOP

本帖最后由 5i365 于 2021-8-6 17:43 编辑

回复 8# went


    大侠牛B, 药到病除,非常感谢
想接着请教大侠,在当前的代码下, 能否顺便填加两个功能
1.如何获取卷标为Win的盘符和分区序号, 变量名分别为%winpf%  %winno%, 这样,我就得到卷标为win的分区, 它的盘符, 它的分区序号, 和它所在的硬盘序号
2.如果我想同时获取三个卷标所在分区的盘符,分区序号和硬盘号,复制同样的代码三份,应该可以实现, 但是能在当前代码稍改一下实现吗? 例如,同时查卷标为Win   soft    data 的分区的盘符,分区序号和各自所在的硬盘号

分区序号是下面的###下面的部分:

  卷 ###      LTR  标签         FS     类型        大小     状态       信息
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  卷     0     C   Win          NTFS   磁盘分区          80 GB  正常         启动
  卷     1     D   soft         NTFS   磁盘分区         92 GB  正常
  卷     2     E    data          NTFS   磁盘分区          29 GB  正常
  卷     3         EFI          FAT32  磁盘分区        1027 MB  正常         系统

TOP

回复 9# newswan


   感谢大侠指引

TOP

回复 11# 5i365


  看了一下,里面还是用的 wmic ,只有用 diskpart

TOP

回复 12# newswan


    嗯, 二楼朋友的代码, 可以显示硬盘号, 分区号, 盘符, 但是PE下运行不了

TOP

本帖最后由 5i365 于 2021-8-6 19:25 编辑

回复 12# newswan


    根据卷标判断盘符,找到了另一种方法, 不过又加了很多个循环, 判断分区号,还没找到方法, 如果还是在你的代码里一并实现就更好了:

for %%a in (Z Y X W V U T S R Q P O N M L K J I H G F E D C B A ) do (
vol %%a:|findstr /i /e win&&set win=%%a
vol %%a:|findstr /i /e soft&&set soft=%%a
)
echo soft所在盘符为%soft%:, win所在盘符为%win%:

TOP

本帖最后由 newswan 于 2021-8-6 20:00 编辑

回复 14# 5i365


pe很多不带wmic powershell ,不然很方便,用 diskpart 处理太麻烦
去无忧论坛找,有现成的,功能很多
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409455&extra=&page=1
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409570&extra=page%3D2

TOP

返回列表