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

[文本处理] 批处理如何获取指定硬盘号上, 卷标为WIN和EFI的分区的盘符

下面有两种方法,可以获取特定卷标WIN和EFI分区的盘符,

方法一:
  1. for /f "tokens=3 delims= " %%c in ('echo list vol^|diskpart^|findstr /i "volume.*win"') do set win=%%c
  2. for /f "tokens=3 delims= " %%c in ('echo list vol^|diskpart^|findstr /i "volume.*efi"') do set efi=%%c
复制代码
方法二:
  1. 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 (
  2. vol %%a:|findstr /i /e win&&set win=%%a
  3. vol %%a:|findstr /i /e efi&&set efi=%%a
  4. )
复制代码
但如何获取指定的硬盘号上的,卷标为WIN和EFI的盘符呢?
手动操作步骤是:
比如我想获得硬盘0上,卷标为WIN和EFI的盘符
chcp 437
diskpart
list vol 【这个命令执行后是个列表, 每一行有对应的卷号、盘符、卷标】
sel vol 0 【从0开始选择】
detail vol 【这个命令执行后,有个*号开头的行,*后面是 HD # 这个井号就是所在的硬盘号】
以此类推就能得出硬盘0上,卷标为WIN和EFI的盘符

不过还是有点复杂, 期待各位高手能有更简单的获取方法,

本帖最后由 newswan 于 2021-8-18 02:11 编辑

用两层for,必需的

TOP

  1. set yph=0
  2. for /f "tokens=3,4 delims= " %%a in ('^(echo select disk %yph%^&echo detail disk^)^|diskpart^|findstr /i "volume.*win volume.*efi"') do (
  3. if %%b==win set win=%%a
  4. if %%b==efi set efi=%%a
  5. )
复制代码

TOP

本帖最后由 5i365 于 2021-8-18 12:42 编辑

回复 3# idwma

执行下面的代码会提示:
Active code page: 437
ECHO is off.
ECHO is off.
Press any key to continue . . .
__________________________________________________
@echo off
chcp 437
set yph=0
for /f "tokens=3,4 delims= " %%a in ('^(echo select disk %yph%^&echo detail disk^)^|diskpart^|findstr /i "volume.*win volume.*efi"') do (
if %%b==win set win=%%a
if %%b==efi set efi=%%a
)
echo %win%
echo %efi%
pause

TOP

通常 ,efi 是没有盘符的
vol 命令无用
diskpart 能获取卷标,分配盘符
  1. sel vol x
  2. assign Letter
复制代码
如果 assign 指定盘符,就不需要再for一次

TOP

回复 4# 5i365


   把大小写全部判断了看可不可以
  1. @echo off
  2. chcp 437
  3. set yph=0
  4. for /f "tokens=3,4 delims= " %%a in ('^(echo select disk %yph%^&echo detail disk^)^|diskpart^|findstr /i "volume.*win volume.*efi"') do (
  5. if %%b==win (set win=%%a) else if %%b==WIN (set win=%%a)
  6. if %%b==efi (set efi=%%a) else if %%b==EFI (set win=%%a)
  7. )
  8. echo %win%
  9. echo %efi%
  10. pause
复制代码

TOP

回复 6# idwma


    一样的效果, 没有结果

TOP

回复 7# 5i365


    看一下这样是什么结果
  1. (echo select disk 0&echo detail disk)|diskpart
复制代码

TOP

回复 8# idwma

Active code page: 437

Microsoft DiskPart version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
On computer: WIN7

DISKPART>
Disk 0 is now the selected disk.

DISKPART>
Apacer  AS340 240GB ATA Device
Disk ID: {DA5845C4-638E-454A-B89D-3B786EEC8A1A}
Type   : SATA
Status : Online
Path   : 0
Target : 0
LUN ID : 0
Location Path : PCIROOT(0)#PCI(1F02)#ATA(C00T00L00)
Current Read-only State : No
Read-only  : No
Boot Disk  : Yes
Pagefile Disk  : Yes
Hibernation File Disk  : No
Crashdump Disk  : Yes
Clustered Disk  : No

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     C   Win          NTFS   Partition     80 GB  Healthy    Boot
  Volume 1     D   DATA         NTFS   Partition    112 GB  Healthy
  Volume 2         W10          NTFS   Partition     29 GB  Healthy
  Volume 3         EFI          FAT32  Partition   1027 MB  Healthy    System

DISKPART> Press any key to continue . . .

TOP

本帖最后由 idwma 于 2021-8-18 16:10 编辑

这个大小写混合是没想到的呀.
这里EFI没有盘符
  1. @echo off
  2. chcp 437
  3. set yph=0
  4. for /f "tokens=3,4 delims= " %%a in ('^(echo select disk %yph%^&echo detail disk^)^|diskpart^|findstr /i "volume.*win volume.*efi"') do (
  5. echo;%%b|findstr /i "win"&&set win=%%a
  6. echo;%%b|findstr /i "efi"&&set efi=%%a
  7. )
  8. echo %win%
  9. echo %efi%
  10. paus
复制代码
1

评分人数

TOP

回复 10# idwma


    Active code page: 437
Win
'win' is not recognized as an internal or external command,
operable program or batch file.
ECHO is off.
ECHO is off.
Press any key to continue . . .

TOP

回复 11# 5i365


    修改了少了set

TOP

返回列表