标题: [文本处理] 批处理如何获取指定硬盘号上, 卷标为WIN和EFI的分区的盘符 [打印本页]
作者: 5i365 时间: 2021-8-17 23:51 标题: 批处理如何获取指定硬盘号上, 卷标为WIN和EFI的分区的盘符
下面有两种方法,可以获取特定卷标WIN和EFI分区的盘符,
方法一:- for /f "tokens=3 delims= " %%c in ('echo list vol^|diskpart^|findstr /i "volume.*win"') do set win=%%c
- for /f "tokens=3 delims= " %%c in ('echo list vol^|diskpart^|findstr /i "volume.*efi"') do set efi=%%c
复制代码
方法二:- 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 efi&&set efi=%%a
- )
复制代码
但如何获取指定的硬盘号上的,卷标为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
- 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
- )
复制代码
作者: 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 能获取卷标,分配盘符复制代码
如果 assign 指定盘符,就不需要再for一次
作者: idwma 时间: 2021-8-18 13:27
回复 4# 5i365
把大小写全部判断了看可不可以- @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) else if %%b==WIN (set win=%%a)
- if %%b==efi (set efi=%%a) else if %%b==EFI (set win=%%a)
- )
- echo %win%
- echo %efi%
- pause
复制代码
作者: 5i365 时间: 2021-8-18 14:51
回复 6# idwma
一样的效果, 没有结果
作者: idwma 时间: 2021-8-18 15:35
回复 7# 5i365
看一下这样是什么结果- (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没有盘符- @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 (
- echo;%%b|findstr /i "win"&&set win=%%a
- echo;%%b|findstr /i "efi"&&set efi=%%a
- )
- echo %win%
- echo %efi%
- 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 |