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

评分人数

TOP

本帖最后由 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>

TOP

  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

TOP

回复 48# idwma


    感谢快速回复, 我有时间再测试一下, 有问题会来反馈

TOP

返回列表