无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 1056|回复: 26
打印 上一主题 下一主题

[原创] 批处理系列10:磁盘分区显示与隐藏工具

[复制链接]
跳转到指定楼层
1#
发表于 2025-5-15 21:59:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
磁盘分区显示与隐藏工具
  1. @ECHO OFF
  2. Title 磁盘分区显示与隐藏工具 (支持MBR和GPT)
  3. mode con lines=36 cols=74
  4. color 1f
  5. setlocal enabledelayedexpansion

  6. :: 设置临时目录
  7. set "TEMPDIR=%TEMP%\DiskPartTool"
  8. if not exist "%TEMPDIR%" mkdir "%TEMPDIR%"

  9. :: 获取管理员权限
  10. >NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
  11.     ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMPDIR%\Getadmin.vbs"
  12.     ECHO UAC.ShellExecute "%~f0", "%*", "", "runas", 1 >> "%TEMPDIR%\Getadmin.vbs"
  13.     CSCRIPT //Nologo "%TEMPDIR%\Getadmin.vbs"
  14.     DEL /f /q "%TEMPDIR%\Getadmin.vbs" 2>NUL
  15.     Exit /B
  16. )

  17. :MAIN_MENU
  18. cls
  19. echo.
  20. echo 当前磁盘列表:
  21. echo list disk > "%TEMPDIR%\DiskPart.txt"
  22. echo exit >> "%TEMPDIR%\DiskPart.txt"
  23. diskpart /s "%TEMPDIR%\DiskPart.txt" | find /v "Copyright" | find /v "DiskPart" | find /v "计算机上" | find /v "退出" > "%TEMPDIR%\DiskList.txt"

  24. :: 显示磁盘列表(过滤无关行)
  25. type "%TEMPDIR%\DiskList.txt"

  26. :GET_DISK_NUMBER
  27. echo.
  28. set "choiceDisk="
  29. set /p "choiceDisk=请输入要操作的磁盘编号:"
  30. if not defined choiceDisk goto GET_DISK_NUMBER

  31. :: 检查输入是否全为数字
  32. set "isValid=1"
  33. for /f "delims=0123456789" %%c in ("%choiceDisk%") do set "isValid=0"
  34. if "%isValid%"=="0" (
  35.     echo 错误:请输入有效的数字!
  36.     goto GET_DISK_NUMBER
  37. )

  38. :: 检查磁盘是否存在
  39. set "diskFound=0"
  40. for /f "tokens=1,2,3,4,5,6,7,8*" %%a in ('type "%TEMPDIR%\DiskList.txt"') do (
  41.     if "%%a"=="磁盘" (
  42.         set "diskNum=%%b"
  43.         if "!diskNum!"=="%choiceDisk%" (
  44.             set "diskFound=1"
  45.             if "%%h"=="*" (
  46.                 set "isGPT=1"
  47.             ) else (
  48.                 set "isGPT=0"
  49.             )
  50.         )
  51.     )
  52. )

  53. if "%diskFound%"=="0" (
  54.     echo 错误:磁盘 %choiceDisk% 不存在!
  55.     goto GET_DISK_NUMBER
  56. )

  57. :: 获取分区列表
  58. echo select disk %choiceDisk% > "%TEMPDIR%\DiskPart.txt"
  59. echo list partition >> "%TEMPDIR%\DiskPart.txt"
  60. echo exit >> "%TEMPDIR%\DiskPart.txt"
  61. diskpart /s "%TEMPDIR%\DiskPart.txt"


  62. :GET_PARTITION_NUMBER
  63. echo.
  64. set /p "partitionNum=请输入要操作的分区编号:"
  65. if not defined partitionNum goto GET_PARTITION_NUMBER

  66. :: 检查输入是否全为数字
  67. set "isValid=1"
  68. for /f "delims=0123456789" %%c in ("%partitionNum%") do set "isValid=0"
  69. if "%isValid%"=="0" (
  70.     echo 错误:请输入有效的数字!
  71.     goto GET_PARTITION_NUMBER
  72. )

  73. if "%isGPT%"=="1" (
  74.     goto GPT_OPERATION
  75. ) else (
  76.     goto MBR_OPERATION
  77. )

  78. :GPT_OPERATION
  79.     :: 定义GUID常量
  80.     set "HIDE_GUID=dfd3c88e-b098-4f5a-a6a4-2a3a5a5d5b5b"
  81.     set "SHOW_GUID=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7"
  82.     :: 获取分区详细信息
  83.     (
  84.         echo select disk !choiceDisk!
  85.         echo select partition !partitionNum!
  86.         echo detail partition
  87.         echo exit
  88.     ) > %TEMPDIR%\check_status.txt

  89.     set "IS_HIDDEN=0"
  90.     set "LETTER="
  91.     for /f "tokens=1,2 delims=: " %%A in ('diskpart /s %TEMPDIR%\check_status.txt') do (
  92.         if "%%A"=="字母" set "LETTER=%%B"
  93.         if "%%A"=="类型" if "%%B"=="%HIDE_GUID%" set "IS_HIDDEN=1"
  94.     )
  95.     del %TEMPDIR%\check_status.txt

  96.     :: 根据状态提示用户
  97.     if !IS_HIDDEN! equ 1 (
  98.         echo.
  99.         echo 该分区当前状态: 已隐藏
  100.         set "OPERATION=显示"
  101.         set "GUID=!SHOW_GUID!"
  102.         set "ACTION_DESC=显示该分区"
  103.     ) else (
  104.         echo.
  105.         echo 该分区当前状态: 已显示
  106.         if defined LETTER echo 当前盘符: !LETTER!
  107.         set "OPERATION=隐藏"
  108.         set "GUID=!HIDE_GUID!"
  109.         set "ACTION_DESC=隐藏该分区"
  110.     )

  111.     :: 确认操作
  112.     echo.
  113.     echo 即将执行操作:
  114.     echo - 磁盘:      !choiceDisk!
  115.     echo - 分区:      !partitionNum!
  116.     echo - 操作:      !ACTION_DESC!
  117.     echo.
  118.     set /p "CONFIRM=确认执行(Y/N)? "
  119.     if /i "!CONFIRM!" neq "Y" (
  120.         echo 操作已取消
  121.         pause
  122.         goto MAIN_MENU
  123.     )

  124.     :: 执行操作
  125.     (
  126.         echo select disk !choiceDisk!
  127.         echo select partition !partitionNum!
  128.    
  129.         if "!OPERATION!"=="隐藏" (
  130.             if defined LETTER echo remove letter=!LETTER!
  131.             echo set id=!GUID!
  132.         ) else (
  133.             echo set id=!GUID!
  134.             echo assign
  135.         )
  136.         echo exit
  137.     ) > %TEMPDIR%\operation.txt

  138.     diskpart /s %TEMPDIR%\operation.txt
  139.      del %TEMPDIR%\operation.txt

  140.     :: 显示结果
  141.     echo.
  142.     if "!OPERATION!"=="隐藏" (
  143.         if defined LETTER (
  144.              echo 成功:分区 !partitionNum! 已隐藏(移除盘符 !LETTER!)
  145.         ) else (
  146.              echo 成功:分区 !partitionNum! 已隐藏(无盘符可移除)
  147.         )
  148.     ) else (
  149.           echo 成功:分区 !partitionNum! 已显示
  150.     )
  151.     echo.
  152.     echo 注意:如果分区未立即显示/隐藏,请尝试刷新资源管理器(F5)或重启计算机
  153.     echo.
  154.     pause
  155.     goto MAIN_MENU       
  156.        
  157. :MBR_OPERATION
  158.     :: 获取分区详细信息
  159.     (
  160.        echo select disk !choiceDisk!
  161.        echo select partition !partitionNum!
  162.        echo detail partition
  163.        echo exit
  164.     ) > "%TEMPDIR%\check_status.txt"

  165.     diskpart /s "%TEMPDIR%\check_status.txt" > "%TEMPDIR%\PartInfo.txt"

  166.     :: 提取分区类型ID
  167.     set "id="
  168.     for /f "tokens=2 delims=:" %%a in ('type "%TEMPDIR%\PartInfo.txt" ^| find "类型  :"') do (
  169.         for /f "tokens=1" %%b in ("%%a") do (
  170.             set "id=%%b"
  171.         )
  172.     )

  173.     if not defined id (
  174.         echo 无法获取分区ID!
  175.         pause
  176.         goto MAIN_MENU
  177.     )

  178.     :: 根据ID判断操作
  179.      if "%id:~0,1%"=="1" (
  180.         set operation=显示
  181.         set newId=0%id:~1,1%
  182.     ) else if "%id:~0,1%"=="0" (
  183.         set operation=隐藏
  184.         set newId=1%id:~1,1%
  185.     ) else (
  186.         echo 分区%partitionNum%的ID类型为: %id%
  187.         pause
  188.         goto MAIN_MENU
  189.     )

  190.     :CONFIRM_OPERATION
  191.     echo.
  192.     set /p "choice=确定%operation%分区%partitionNum%?(Y/N): "
  193.     if /i "%choice%"=="N" goto MAIN_MENU
  194.     if /i not "%choice%"=="Y" goto CONFIRM_OPERATION

  195.     :: 执行操作
  196.     (
  197.       echo select disk %choiceDisk%
  198.       echo select partition %partitionNum%
  199.       echo set id=%newId%
  200.       echo exit
  201.     ) > "%TEMPDIR%\DiskPart.txt"

  202.     diskpart /s "%TEMPDIR%\DiskPart.txt"
  203.     echo.
  204.     echo 分区%partitionNum%已成功%operation%!
  205.     echo.
  206.     pause
  207.     goto MAIN_MENU         
复制代码
2#
发表于 7 天前 | 只看该作者
试试,不清楚有没用
回复

使用道具 举报

3#
发表于 7 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

4#
发表于 7 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
发表于 7 天前 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

6#
发表于 7 天前 | 只看该作者
感谢楼主
回复

使用道具 举报

7#
发表于 7 天前 | 只看该作者
感谢分享!!!
回复

使用道具 举报

8#
发表于 7 天前 | 只看该作者
谢谢分享!!!
回复

使用道具 举报

9#
发表于 7 天前 | 只看该作者

谢谢楼主分享
回复

使用道具 举报

10#
发表于 7 天前 | 只看该作者
感谢分享
回复

使用道具 举报

11#
发表于 7 天前 | 只看该作者
支持原创 试试看
回复

使用道具 举报

12#
发表于 7 天前 | 只看该作者
支持原创 试试看
回复

使用道具 举报

13#
发表于 7 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

14#
发表于 7 天前 | 只看该作者
感谢发现
回复

使用道具 举报

15#
发表于 7 天前 | 只看该作者
本帖最后由 dayeye 于 2025-5-16 09:23 编辑


显示用了2次,之后不能隐藏。
WIN10-18363.2274 Ramos UEFI+GPT
可能与操作分区BCD被认为当前win引导有关。
实际上系统为G4D引导的内存系统。
是否与RAMOS C的bootstat.dat有关?

点评

分区1 错误:设备使用中  详情 回复 发表于 7 天前
回复

使用道具 举报

16#
发表于 7 天前 来自手机 | 只看该作者
应该是在资源管理器里隐藏就行了吧,没必要去盘符吧?
回复

使用道具 举报

17#
发表于 7 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

18#
发表于 7 天前 | 只看该作者
谢谢楼主的分享!
回复

使用道具 举报

19#
发表于 7 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

20#
发表于 7 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

21#
发表于 7 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

22#
 楼主| 发表于 7 天前 | 只看该作者
dayeye 发表于 2025-5-16 09:15
显示用了2次,之后不能隐藏。
WIN10-18363.2274 Ramos UEFI+GPT
可能与操作分区BCD被认为当前win引导有 ...

分区1  错误:设备使用中
回复

使用道具 举报

23#
发表于 7 天前 | 只看该作者
来看一下
回复

使用道具 举报

24#
发表于 7 天前 | 只看该作者
谢谢分享,试试
回复

使用道具 举报

25#
发表于 7 天前 | 只看该作者
感谢分享
回复

使用道具 举报

26#
发表于 7 天前 | 只看该作者
谢谢楼主分享,辛苦了
回复

使用道具 举报

27#
发表于 7 天前 来自手机 | 只看该作者
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-5-23 19:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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