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

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

[复制链接]
发表于 2021-8-6 20:06:43 | 显示全部楼层
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('^(echo list disk ^)^|diskpart^|find "联机"') do set/a n+=1
set/a n=!n!-1
for /l %%i in (0,1,!n!) do (
for %%a in (Win soft data) do (
(echo select disk %%i &echo detail disk)|diskpart|find "%%a">nul && echo %%a在硬盘:%%i
)
)
pause
发表于 2021-8-7 00:18:53 | 显示全部楼层
回复 10# 5i365


    如果卷标中间有空格显示会不准确
ansi编码
  1. @echo off & cd /d "%~dp0"
  2. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
  3. setlocal enabledelayedexpansion
  4. set "labs=Win10|Backup"
  5. set "num=1"
  6. for /l %%i in (0,1,10) do (
  7.         for /f "tokens=2,3,4,5,7,8" %%a in ('(echo select disk %%i ^& echo detail disk ^) ^| diskpart ^| findstr /i "%labs:|= %"') do (
  8.                 set "disk_!num!=%%i"
  9.                 set "part_!num!=%%a"
  10.                 set "letter_!num!=%%b"
  11.                 set "lab_!num!=%%c"
  12.                 set "fs_!num!=%%d"
  13.                 set "size_!num!=%%e%%f"
  14.                 set /a "num+=1"
  15.         )
  16. )
  17. set /a "num-=1"
  18. for /l %%i in (1,1,%num%) do (
  19.         echo 硬盘号: !disk_%%i!        分区号: !part_%%i!        盘符: !letter_%%i! 卷标:!lab_%%i!        类型:!fs_%%i!        大小:!size_%%i!
  20. )
  21. pause&exit
复制代码
发表于 2021-8-7 00:21:53 | 显示全部楼层
回复 17# went


    多个卷标使用|分隔,如
  1. set "labs=Win10|Backup|Sortware|Games"
复制代码
 楼主| 发表于 2021-8-7 05:15:46 | 显示全部楼层
回复 17# went
再次感谢大侠支招, 分别在Win下和PE下测试了一下, 结果如下:

Win下会有计算机名显示在除第二行和第三行的分区号后面:

硬盘号: 0       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 0       分区号: 0       盘符: C 卷标:Win        类型:NTFS       大小:80GB
硬盘号: 0       分区号: 1       盘符: D 卷标:soft       类型:NTFS       大小:112GB
硬盘号: 1       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 2       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 3       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 4       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 5       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 6       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 7       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 8       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 9       分区号: WIN7    盘符:  卷标:    类型:   大小:
硬盘号: 10      分区号: WIN7    盘符:  卷标:    类型:   大小:
请按任意键继续. . .

PE下会有硬盘型号显示在第一行的分区号后面:

硬盘号: 0       分区号: SP550   盘符:  卷标:    类型:   大小:
硬盘号: 0       分区号: 0       盘符: D 卷标:Win        类型:NTFS       大小:80GB
硬盘号: 0       分区号: 1       盘符: C 卷标:soft       类型:NTFS       大小:112GB
请按任意键继续. . .

另外,请教大侠, 如果在后续的代码里使用各自的变量呢?
例如,要在代码中搜索的是卷标是 win 和 soft ,各自的硬盘号, 分区号, 盘符变量名分别为
%win_yph%  %win_fqh%  %win_pf%
%soft_yph%  %soft_fqh%  %soft_pf%

后面代码中要用到它们,如:

if %win_fqh%=="2"
if %soft_yqh%=="1"
if %soft_pf%=="C:"
发表于 2021-8-7 09:23:11 | 显示全部楼层
照下面代码取变量
  1. @echo off & cd /d "%~dp0"
  2. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
  3. set "labs=Win10|Backup|Software|Games"
  4. for /l %%i in (0,1,10) do (
  5.         for /f "tokens=2,3,4,5,7,8" %%a in ('(echo select disk %%i ^& echo detail disk ^) ^| diskpart ^| findstr /i "%labs:|= %"') do (
  6.                 set "%%c_yph=%%i"
  7.                 set "%%c_fqh=%%a"
  8.                 set "%%c_pf=%%b"
  9.                 set "%%c_lab=%%c"
  10.                 set "%%c_fs=%%d"
  11.                 set "%%c_size=%%e%%f"
  12.         )
  13. )
  14. REM 获取卷标为Win10的相关信息
  15. echo 硬盘号: %Win10_yph%        分区号: %Win10_fqh%        盘符: %Win10_pf% 卷标:        %Win10_lab%        类型:%Win10_fs%        大小:%Win10_size%
  16. REM 获取卷标为Backup的相关信息
  17. echo 硬盘号: %Backup_yph%        分区号: %Backup_fqh%        盘符: %Backup_pf% 卷标:        %Backup_lab%        类型:%Backup_fs%        大小:%Backup_size%
  18. pause&exit
复制代码
回复 19# 5i365

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 牛X

查看全部评分

 楼主| 发表于 2021-8-7 09:29:22 | 显示全部楼层
回复 20# went

你好, 刚刚试了一下, 上面的代码,执行后,结果是空的:

硬盘号:         分区号:         盘符:  卷标:            类型:   大小:
硬盘号:         分区号:         盘符:  卷标:            类型:   大小:
请按任意键继续. . .
发表于 2021-8-7 09:36:52 | 显示全部楼层
回复 21# 5i365


    labs改了吗
 楼主| 发表于 2021-8-7 09:38:28 | 显示全部楼层
回复 22# went

我真是笨到家了, 忘改了,

刚试了一下, 完美执行, 代码小巧, 牛X
 楼主| 发表于 2021-8-20 15:07:25 | 显示全部楼层
回复 20# went


    你好, 分区号,应该以list part里面的号为准, 从1开始的, 例如下面的操作步骤, 卷标为Win10的分区其分区号应该是1,而不是0,如何修改? 感谢:


Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>diskpart

Microsoft DiskPart 版本 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
在计算机上: WIN7

DISKPART> sel disk 0

磁盘 0 现在是所选磁盘。

DISKPART> detail disk

Apacer  AS340 240GB ATA Device
磁盘 ID: {DA5845C4-638E-454A-B89D-3B786EEC8A1A}
类型   : SATA
状态 : 联机
路径   : 0
目标 : 0
LUN ID : 0
位置路径 : PCIROOT(0)#PCI(1F02)#ATA(C00T00L00)
当前只读状态: 否
只读: 否
启动磁盘: 是
页面文件磁盘: 是
休眠文件磁盘: 否
故障转储磁盘: 是
群集磁盘  : 否

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

DISKPART> list part

  分区 ###       类型              大小     偏移量
  -------------  ----------------  -------  -------
  分区      1    系统                1027 MB  1024 KB
  分区      2    主要                  80 GB  1028 MB
  分区      3    主要                 112 GB    81 GB
  分区      4    主要                  29 GB   193 GB

DISKPART>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 21:06 , Processed in 0.036514 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表