Board logo

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

作者: 5i365    时间: 2021-8-17 23:51     标题: 批处理如何获取指定硬盘号上, 卷标为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 01:55

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

用两层for,必需的
作者: idwma    时间: 2021-8-18 10:54

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

作者: 5i365    时间: 2021-8-18 12:10

本帖最后由 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
作者: newswan    时间: 2021-8-18 13:25

通常 ,efi 是没有盘符的
vol 命令无用
diskpart 能获取卷标,分配盘符
  1. sel vol x
  2. assign Letter
复制代码
如果 assign 指定盘符,就不需要再for一次
作者: idwma    时间: 2021-8-18 13:27

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

作者: 5i365    时间: 2021-8-18 14:51

回复 6# idwma


    一样的效果, 没有结果
作者: idwma    时间: 2021-8-18 15:35

回复 7# 5i365


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

作者: 5i365    时间: 2021-8-18 15:38

回复 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 . . .
作者: idwma    时间: 2021-8-18 15:43

本帖最后由 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
复制代码

作者: 5i365    时间: 2021-8-18 16:03

回复 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 . . .
作者: idwma    时间: 2021-8-18 16:11

回复 11# 5i365


    修改了少了set




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