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

[系统相关] [已解决]如何在批处理中使用diskpart命令,删除特定卷标的分区

[复制链接]
发表于 2021-8-9 12:59:54 | 显示全部楼层
回复 45# 5i365


    提示的中文显示多加个判断
变量的后面习惯性的多打了个空格
  1. @echo off
  2. chcp 437
  3. echo list vol|diskpart|findstr /i "volume.*no" &&set f=1||chcp 936
  4. if not defined f start mshta vbscript:msgbox("没找到卷标为no的分区",0,"%提醒%")(window.close)&&exit
  5. if exist dsk.txt del dsk.txt
  6. for /f "tokens=2,3 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  7.         if exist %%b:\windows\system32 (
  8.                 for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list disk^)^|diskpart^|findstr "*"') do set disk=%%c&BOOTICE /DEVICE=%%c /mbr /backup /sectors=1 /quiet /file=MBR_Bak
  9.                 (echo select volume %%a
  10.                 echo delete volume)|diskpart
  11.         )
  12. )

  13. for /f "tokens=2 delims= " %%c in ('^(echo select disk %disk% ^&echo list part^)^|diskpart^|findstr /i "System Reserved Recovery"') do (
  14.         if not "%%c"=="" (
  15.                 (echo sel disk %disk%
  16.                 echo sel part %%c
  17.                 echo del part override)>>dsk.txt
  18.         )
  19. )

  20. for /f "tokens=2 delims= " %%a in ('^(echo select disk %disk% ^&echo detail disk^)^|diskpart^|findstr /i "volume.*no"') do (
  21.         if not "%%a"=="" (
  22.                 (echo select volume %%a
  23.                 echo delete volume)>>dsk.txt
  24.         )
  25. )
  26. echo;exit>>dsk.txt
  27. if exist dsk.txt diskpart /s dsk.txt
  28. del dsk.txt
  29. for /f "tokens=3 delims= " %%c in ('echo list vol^|diskpart^|findstr /i "volume.*data"') do set data_pf=%%c
  30. set no_yph=%disk%
  31. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 强!

查看全部评分

 楼主| 发表于 2021-8-9 19:42:11 | 显示全部楼层
本帖最后由 5i365 于 2021-8-9 19:44 编辑

回复 46# idwma

第14-20行
for /f "tokens=2 delims= " %%c in ('^(echo select disk %disk% ^&echo list part^)^|diskpart^|findstr /i "System Reserved Recovery"') do (
        if not "%%c"=="" (
                (echo sel disk %disk%
                echo sel part %%c
                echo del part override)>>dsk.txt
        )
)

你好,大侠,能增强一下上面几行代码的功能吗? 改成类似下面的,用分区类型的ID来表示的形式,这样我如果想删除其它系统下的某分区类型的分区,就直接在后加分区类型的ID就可以了,这样功能就没强大多了
for /f "tokens=2 delims= " %%c in ('^(echo select disk %disk% ^&echo list part^)^|diskpart^|findstr /i "C12A7328-F81F-11D2-BA4B-00A0C93EC93B DE94BBA4-06D1-4D40-A16A-BFD50179D6AC E3C9E316-0B5C-4DB8-817D-F92DF00215AE 其它系统下分区类型的ID"')

★★★需要增强的原因是:

所有windows相关的分区类型,因为本身就是微软的东西, 他们都有英文名字, 像System、 Reserved、 Recovery
但是更多的其它系统,像苹果系统,linux等系统下的分区类型,却没有名字,统一显示为Unknown
但好在,每种分区类型,在分区的详情中都有一串字符ID来表示这种类型,例如:查看一个 system类型分区的详情,里面有下面的内容
Type: C12A7328-F81F-11D2-BA4B-00A0C93EC93B

Windows下的一些分区,英文类型名字和其ID的对应关系如下
system
C12A7328-F81F-11D2-BA4B-00A0C93EC93B

recovery
DE94BBA4-06D1-4D40-A16A-BFD50179D6AC

reserved
E3C9E316-0B5C-4DB8-817D-F92DF00215AE
_______________________________________________________
附获取分区类型详情的步骤:

Active code page: 437

C:\Users\Administrator>diskpart

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

DISKPART> sel disk 0

Disk 0 is now the selected disk.

DISKPART> list part

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 1    System            1027 MB  1024 KB
  Partition 2    Primary             80 GB  1028 MB
  Partition 3    Primary            112 GB    81 GB
  Partition 4    Primary             29 GB   193 GB

DISKPART> sel part 1

Partition 1 is now the selected partition.

DISKPART> detail part

Partition 1
Type    : c12a7328-f81f-11d2-ba4b-00a0c93ec93b
Hidden  : Yes
Required: No
Attrib  : 0X8000000000000000
Offset in Bytes: 1048576

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
* Volume 3         EFI          FAT32  Partition   1027 MB  Healthy    System

DISKPART>
发表于 2021-8-9 19:57:38 | 显示全部楼层
  1. for /f "tokens=2 delims= " %%c in ('^(echo sel disk %disk% ^&echo list part^)^|diskpart^|findstr /i "Partition.*B"') do (
  2. ((echo sel disk %disk%
  3. echo sel partition %%c
  4. echo detail partition)|diskpart|findstr /i "C12A7328-F81F-11D2-BA4B-00A0C93EC93B DE94BBA4-06D1-4D40-A16A-BFD50179D6AC E3C9E316-0B5C-4DB8-817D-F92DF00215AE 其它系统下分区类型的ID"
  5. )&&(
  6. (echo sel disk %disk%
  7. echo sel part %%c
  8. echo del part override)>>dsk.txt
  9. )
  10. )
复制代码
回复 47# 5i365
 楼主| 发表于 2021-8-9 20:03:00 | 显示全部楼层
回复 48# idwma


    感谢快速回复, 我有时间再测试一下, 有问题会来反馈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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