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

哦, 我在无忧看到过一种方式删分区, 非常快, 几乎是秒删的

原理大概是, 先把获取硬盘信息, 然后根据要求生成要删除的代码, 之后定向到外部文件, 然后用用下面方法执行这个文件
diskpart /s 生成的删除代码文件

TOP

回复 33# 5i365


    每次删完一个分区顺序会变,要重新获取一次位置这步省不了是慢一点

TOP

另外, 感觉上面的方法一的代码, 执行速度快

能否在方法一代码的基础上改一下?

TOP

通用定位有windows目录的卷来定位硬盘也一样的,可以少循环几次

TOP

回复 30# idwma

感谢, 测了多次了, 感觉这回没问题了, 但是还没有试多块硬盘时什么情况,

现在的方法,好像没有最开始   方法一代码中   的开头几行判断多个硬盘的部分,下面是原来的方法一代码

方法一代码:
@echo off&setlocal enabledelayedexpansion
chcp 437
for /f "delims=" %%i in ('^(echo list disk ^)^|diskpart^|find "Online"') do set/a n+=1
        set/a n=!n!-1
        for /l %%i in (0,1,!n!) do ((echo select disk %%i
&echo detail disk)|diskpart|findstr /i "volume.*no" &&set f=%%i)
                if not defined f start mshta vbscript:msgbox("not find no",0,"tip")(window.close)&&exit
                for /l %%i in (0,1,!n!) do (
                        for /f "tokens=2,3 delims= " %%a in ('^(echo select disk %%i ^&echo detail disk^)^|diskpart^|findstr /i "volume.*no"') do (
                                if exist %%b:\windows\system32 (
                                        (echo select disk %%i
                                        echo select volume %%a
                                        echo delete volume)|diskpart
                                        for /f "tokens=2 delims= " %%c in ('^(echo select disk %%i ^&echo list part^)^|diskpart^|findstr /i "system Reserved Recovery"') do (
                                                if not "%%c"=="" (
                                                (echo sel disk %%i
                                                echo sel part %%c
                                                echo del part override)|diskpart)
                                        )
                                )
                        )
                )
pause

TOP

回复 29# 5i365


那再改一下换个方式
  1. @echo off
  2. chcp 437
  3. echo list vol|diskpart|findstr /i "volume.*no" &&set f=1
  4. if not defined f start mshta vbscript:msgbox("没找到卷标为no的分区",0,"%提醒%")(window.close)&&exit
  5. for /f "tokens=2,3 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  6. if exist %%b:\windows\system32 (
  7. (echo select volume %%a
  8. echo delete volume)|diskpart
  9. for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list disk^)^|diskpart^|findstr "*"') do set disk=%%c
  10. )
  11. )
  12. :re
  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)|diskpart
  18. goto :re
  19. )
  20. )
  21. :ll
  22. for /f "tokens=2 delims= " %%a in ('^(echo select disk %disk% ^&echo detail disk^)^|diskpart^|findstr /i "volume.*no"') do (
  23. if not "%%a"=="" (
  24. (echo select volume %%a
  25. echo delete volume)|diskpart
  26. goto :ll
  27. )
  28. )
  29. pause
复制代码
1

评分人数

TOP

回复 26# idwma

又试了一下上面的新代码,

现在情况,卷标为no的分区都删了, 但是 esp分区, msr分区,rec分区,没有删

TOP

回复 26# idwma


现在问题是不稳定, 有时可以正确删除, 有时就不行, 比如下面的分区情况:

_______________________________________________________________________
删除前硬盘分区信息:

    Active code page: 437

X:\Users\Administrator>diskpart

Microsoft DiskPart version 10.0.19041.1

Copyright (C) Microsoft Corporation.
On computer: winpe

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             20 GB  1028 MB
  Partition 3    Primary             20 GB    21 GB
  Partition 4    Primary             20 GB    41 GB
  Partition 5    Primary             20 GB    61 GB
  Partition 6    Recovery            20 GB    81 GB
  Partition 9    Reserved            20 GB   101 GB
  Partition 10   Primary             59 GB   121 GB
  Partition 7    Unknown             36 GB   181 GB
  Partition 8    Unknown             13 GB   217 GB

DISKPART> detail disk

Hitachi HDP725025GLA380
Disk ID: {33E8B399-451F-43F3-BB00-A1116C0B80AE}
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  : No
Pagefile Disk  : No
Hibernation File Disk  : No
Crashdump Disk  : No
Clustered Disk  : No

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     C   no           NTFS   Partition     20 GB  Healthy
  Volume 1     D   no           NTFS   Partition     20 GB  Healthy
  Volume 2     E   data         NTFS   Partition     20 GB  Healthy
  Volume 3     F   no           NTFS   Partition     20 GB  Healthy
  Volume 4     G                RAW    Partition     20 GB  Healthy
  Volume 5     H   soft         NTFS   Partition     59 GB  Healthy
  Volume 6                      FAT32  Partition   1027 MB  Healthy    Hidden

DISKPART> list vol

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     C   no           NTFS   Partition     20 GB  Healthy
  Volume 1     D   no           NTFS   Partition     20 GB  Healthy
  Volume 2     E   data         NTFS   Partition     20 GB  Healthy
  Volume 3     F   no           NTFS   Partition     20 GB  Healthy
  Volume 4     G                RAW    Partition     20 GB  Healthy
  Volume 5     H   soft         NTFS   Partition     59 GB  Healthy
  Volume 6                      FAT32  Partition   1027 MB  Healthy    Hidden

_________________________________________________________________
删除后硬盘分区信息:
Active code page: 437

X:\Users\Administrator>diskpart

Microsoft DiskPart version 10.0.19041.1

Copyright (C) Microsoft Corporation.
On computer: winpe

DISKPART> sel disk 0

Disk 0 is now the selected disk.

DISKPART> list part

  Partition ###  Type              Size     Offset
  -------------  ----------------  -------  -------
  Partition 4    Primary             20 GB    41 GB
  Partition 5    Primary             20 GB    61 GB
  Partition 7    Unknown             36 GB   181 GB
  Partition 8    Unknown             13 GB   217 GB

DISKPART> detail disk

Hitachi HDP725025GLA380
Disk ID: {33E8B399-451F-43F3-BB00-A1116C0B80AE}
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  : No
Pagefile Disk  : No
Hibernation File Disk  : No
Crashdump Disk  : No
Clustered Disk  : No

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     E   data         NTFS   Partition     20 GB  Healthy
  Volume 1     F   no           NTFS   Partition     20 GB  Healthy

DISKPART>

TOP

本帖最后由 5i365 于 2021-8-8 15:13 编辑

回复 26# idwma


    刚试了一下, 误删了一个卷标不是no的分区, 留下了一个卷标是no分区

TOP

本帖最后由 idwma 于 2021-8-8 15:03 编辑

再改一下加个判断
还是套娃嘛一层不行就两层...
  1. @echo off&setlocal enabledelayedexpansion
  2. chcp 437
  3. echo list vol|diskpart|findstr /i "volume.*no" &&set f=1
  4. if not defined f start mshta vbscript:msgbox("没找到卷标为no的分区",0,"%提醒%")(window.close)&&exit
  5. for /f "tokens=2,3 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  6. if exist %%b:\windows\system32 (
  7. (echo select volume %%a
  8. echo delete volume)|diskpart
  9. call :re
  10. for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list disk^)^|diskpart^|findstr "*"') do set disk=%%c
  11. )
  12. )
  13. :ll
  14. for /f "tokens=2 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  15. for /f "tokens=2 delims=* " %%b in ('^(echo sel vol %%a ^&echo list disk^)^|diskpart^|findstr "*"') do (
  16. if "!disk!"=="%%b" (
  17. (echo select volume %%a
  18. echo delete volume)|diskpart
  19. goto :ll
  20. )
  21. )
  22. )
  23. pause
  24. goto :eof
  25. :re
  26. for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list part^)^|diskpart^|findstr "System Reserved Recovery"') do (
  27. if not "%%c"=="" (
  28. (echo select volume %%a
  29. echo sel part %%c
  30. echo del part override)|diskpart
  31. goto :re
  32. )
  33. )
复制代码

TOP

  1.   Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  2.   ----------  ---  -----------  -----  ----------  -------  ---------  --------
  3.   Volume 0     C                NTFS   Partition    120 GB  Healthy    Boot
  4.   Volume 1     D                NTFS   Partition    356 GB  Healthy
  5.   Volume 2                      FAT32  Partition    260 MB  Healthy    System
  6.   Volume 3     F                NTFS   Partition   1024 MB  Healthy
  7.   Volume 4         New Volume   ReFS   Partition   7165 MB  Healthy
  8.   Volume 5     E       New Vol  NTFS   Partition      9 GB  Healthy
复制代码
上面 volume 4 获取盘符就会出错

TOP

本帖最后由 newswan 于 2021-8-8 12:48 编辑

回复 22# 5i365

改的这一段,%%a 是 卷number %%b 是卷letter,
当然,要有letter 才是正确的,否则就要出错。
  1. @echo off
  2. chcp 437
  3. echo list vol|diskpart|findstr /i "volume.*no" &&set f=1
  4. if not defined f start mshta vbscript:msgbox("not find no",0,"tip")(window.close)&&exit
  5.         for /f "tokens=2,3 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  6.                         (echo select volume %%b
  7.                         echo delete volume)|diskpart
  8.                 )
  9.         )
  10. pause
复制代码

TOP

回复 22# 5i365


你现在用的方法1还是方法2?

TOP

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

回复 18# newswan

echo list vol|diskpart|findstr /i "volume.*no"
如何修改上面的代码,来搜索到盘符?
然后用
sel vol 盘符
del vol
应该稳定,不会变化

找到一段代码, 但是不知道怎么修改
(echo select disk 0 ^& echo detail disk ^) ^| diskpart ^| findstr /i "%labs:|= %"'

TOP

回复 19# Batcher

多谢指导, 很想知道大侠, 用什么批处理的IDE调试, 另外很想知道有没有将批处理格式化的工具?

TOP

返回列表