无忧启动论坛

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

[原创] 批处理系列9:GPT磁盘的显示与隐藏

  [复制链接]
跳转到指定楼层
1#
发表于 2025-5-13 17:27:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 青青草 于 2025-5-14 00:10 编辑

GPT磁盘的显示与隐藏
  1. @echo off
  2. Title GPT磁盘的显示与隐藏
  3. setlocal enabledelayedexpansion


  4. :: 显示操作菜单
  5. echo.
  6. echo [1] 隐藏分区(修改GUID+移除盘符)
  7. echo [2] 显示分区(恢复GUID+分配盘符)
  8. echo.
  9. set /p "CHOICE=请选择操作(1/2): "

  10. :: 验证输入
  11. if "!CHOICE!" neq "1" if "!CHOICE!" neq "2" (
  12.     echo 错误:无效选择
  13.     pause
  14.     exit /b
  15. )

  16. :: 设置GUID
  17. if "!CHOICE!"=="1" (
  18.     set "OPERATION=隐藏"
  19.     set "GUID=dfd3c88e-b098-4f5a-a6a4-2a3a5a5d5b5b"
  20. ) else (
  21.     set "OPERATION=显示"
  22.     set "GUID=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7"
  23. )

  24. :: 自动显示磁盘列表
  25. echo.
  26. echo 正在获取磁盘信息...
  27. (
  28.     echo list disk
  29.     echo exit
  30. ) > %temp%\list_disks.txt
  31. diskpart /s %temp%\list_disks.txt
  32. del %temp%\list_disks.txt

  33. :: 获取磁盘选择
  34. echo.
  35. set /p "DISK_NUMBER=请输入磁盘编号: "

  36. :: 自动显示分区列表
  37. echo.
  38. echo 正在获取分区信息...
  39. (
  40.     echo select disk !DISK_NUMBER!
  41.     echo list partition
  42.     echo exit
  43. ) > %temp%\list_partitions.txt
  44. diskpart /s %temp%\list_partitions.txt
  45. del %temp%\list_partitions.txt

  46. :: 获取分区选择
  47. echo.
  48. set /p "PARTITION_NUMBER=请输入分区号: "

  49. :: 确认操作
  50. echo.
  51. echo 即将执行操作:
  52. echo - 磁盘:      !DISK_NUMBER!
  53. echo - 分区:      !PARTITION_NUMBER!
  54. echo - 操作:      !OPERATION!
  55. echo.
  56. set /p "CONFIRM=确认执行?(Y/N): "
  57. if /i "!CONFIRM!" neq "Y" (
  58.     echo 操作已取消
  59.     pause
  60.     exit /b
  61. )

  62. :: 获取当前盘符(仅隐藏操作时需要)
  63. if "!CHOICE!"=="1" (
  64.     (
  65.         echo select disk !DISK_NUMBER!
  66.         echo select partition !PARTITION_NUMBER!
  67.         echo detail partition
  68.         echo exit
  69.     ) > %temp%\get_letter.txt
  70.    
  71.     set "LETTER="
  72.     for /f "tokens=2 delims=: " %%L in ('diskpart /s %temp%\get_letter.txt ^| find "字母"') do (
  73.         set "LETTER=%%L"
  74.     )
  75.     del %temp%\get_letter.txt
  76. )

  77. :: 执行操作
  78. (
  79.     echo select disk !DISK_NUMBER!
  80.     echo select partition !PARTITION_NUMBER!
  81.    
  82.     if "!CHOICE!"=="1" (
  83.         if defined LETTER echo remove letter=!LETTER!
  84.         echo set id=!GUID!
  85.     ) else (
  86.         echo set id=!GUID!
  87.         echo assign
  88.     )
  89.     echo exit
  90. ) > %temp%\operation.txt

  91. diskpart /s %temp%\operation.txt
  92. del %temp%\operation.txt

  93. :: 显示结果
  94. echo.
  95. if "!CHOICE!"=="1" (
  96.     if defined LETTER (
  97.         echo 成功:分区 !PARTITION_NUMBER! 已隐藏(移除盘符 !LETTER!)
  98.     ) else (
  99.         echo 成功:分区 !PARTITION_NUMBER! 已隐藏(无盘符可移除)
  100.     )
  101. ) else (
  102.     echo 成功:分区 !PARTITION_NUMBER! 已显示
  103. )
  104. echo 注意:如果分区未立即显示/隐藏,请尝试刷新资源管理器(F5)或重启计算机
  105. pause
复制代码
更新:
  1. @echo off
  2. Title GPT磁盘的显示与隐藏
  3. mode con lines=36 cols=74
  4. color 1f
  5. setlocal enabledelayedexpansion

  6. :: 获取管理员权限
  7. >NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
  8.     ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
  9.     ECHO UAC.ShellExecute "!%~f0!", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
  10.     CSCRIPT //Nologo "%TEMP%\Getadmin.vbs"& DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL& Exit)
  11. pushd "%CD%"&& CD /D "%~dp0"  

  12. :: 定义GUID常量
  13. set "HIDE_GUID=dfd3c88e-b098-4f5a-a6a4-2a3a5a5d5b5b"
  14. set "SHOW_GUID=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7"

  15. :MAIN_MENU
  16. cls
  17. echo.
  18. echo 当前磁盘列表:
  19. (
  20.     echo list disk
  21.     echo exit
  22. ) > %temp%\list_disks.txt
  23. diskpart /s %temp%\list_disks.txt
  24. del %temp%\list_disks.txt

  25. :: 获取磁盘选择
  26. echo.
  27. set /p "DISK_NUMBER=请输入磁盘编号: "

  28. :: 自动显示分区列表
  29. echo.
  30. echo 正在获取分区信息...
  31. (
  32.     echo select disk !DISK_NUMBER!
  33.     echo list partition
  34.     echo exit
  35. ) > %temp%\list_partitions.txt
  36. diskpart /s %temp%\list_partitions.txt
  37. del %temp%\list_partitions.txt

  38. :: 获取分区选择
  39. echo.
  40. set /p "PARTITION_NUMBER=请输入分区号: "

  41. :: 检查分区当前状态
  42. (
  43.     echo select disk !DISK_NUMBER!
  44.     echo select partition !PARTITION_NUMBER!
  45.     echo detail partition
  46.     echo exit
  47. ) > %temp%\check_status.txt

  48. set "IS_HIDDEN=0"
  49. set "LETTER="
  50. for /f "tokens=1,2 delims=: " %%A in ('diskpart /s %temp%\check_status.txt') do (
  51.     if "%%A"=="字母" set "LETTER=%%B"
  52.     if "%%A"=="类型" if "%%B"=="%HIDE_GUID%" set "IS_HIDDEN=1"
  53. )
  54. del %temp%\check_status.txt

  55. :: 根据状态提示用户
  56. if !IS_HIDDEN! equ 1 (
  57.     echo.
  58.     echo 该分区当前状态: 已隐藏
  59.     set "OPERATION=显示"
  60.     set "GUID=!SHOW_GUID!"
  61.     set "ACTION_DESC=显示该分区"
  62. ) else (
  63.     echo.
  64.     echo 该分区当前状态: 已显示
  65.     if defined LETTER echo 当前盘符: !LETTER!
  66.     set "OPERATION=隐藏"
  67.     set "GUID=!HIDE_GUID!"
  68.     set "ACTION_DESC=隐藏该分区"
  69. )

  70. :: 确认操作
  71. echo.
  72. echo 即将执行操作:
  73. echo - 磁盘:      !DISK_NUMBER!
  74. echo - 分区:      !PARTITION_NUMBER!
  75. echo - 操作:      !ACTION_DESC!
  76. echo.
  77. set /p "CONFIRM=确认执行(Y/N)? "
  78. if /i "!CONFIRM!" neq "Y" (
  79.     echo 操作已取消
  80.     pause
  81.     goto MAIN_MENU
  82. )

  83. :: 执行操作
  84. (
  85.     echo select disk !DISK_NUMBER!
  86.     echo select partition !PARTITION_NUMBER!
  87.    
  88.     if "!OPERATION!"=="隐藏" (
  89.         if defined LETTER echo remove letter=!LETTER!
  90.         echo set id=!GUID!
  91.     ) else (
  92.         echo set id=!GUID!
  93.         echo assign
  94.     )
  95.     echo exit
  96. ) > %temp%\operation.txt

  97. diskpart /s %temp%\operation.txt
  98. del %temp%\operation.txt

  99. :: 显示结果
  100. echo.
  101. if "!OPERATION!"=="隐藏" (
  102.     if defined LETTER (
  103.         echo 成功:分区 !PARTITION_NUMBER! 已隐藏(移除盘符 !LETTER!)
  104.     ) else (
  105.         echo 成功:分区 !PARTITION_NUMBER! 已隐藏(无盘符可移除)
  106.     )
  107. ) else (
  108.     echo 成功:分区 !PARTITION_NUMBER! 已显示
  109. )
  110. echo 注意:如果分区未立即显示/隐藏,请尝试刷新资源管理器(F5)或重启计算机
  111. pause
  112. goto MAIN_MENU
复制代码





点评

一句话就解决的东西 ,你搞的这么复杂 MOUNTVOL k: /S  发表于 2025-5-13 22:16
没什么用的,显示而已,WIN11已无法删除更新里面的内容,只能到PE里去更新或删除,所以,这个批处理实在没什么意思,还要一步步的选择,这也太令人麻烦了吧,一点即显不是更好吗  发表于 2025-5-13 22:08
2#
发表于 2025-5-13 17:32:52 | 只看该作者
感谢分享
回复

使用道具 举报

3#
发表于 2025-5-13 18:05:53 | 只看该作者
谁来试一下?看看效果?
回复

使用道具 举报

4#
发表于 2025-5-13 20:08:27 | 只看该作者
感谢分享
回复

使用道具 举报

5#
发表于 2025-5-13 20:22:14 | 只看该作者
进来学习一下
回复

使用道具 举报

6#
发表于 2025-5-13 22:21:16 | 只看该作者
感谢楼主分享
回复

使用道具 举报

7#
发表于 2025-5-13 22:31:51 | 只看该作者
感谢分享
回复

使用道具 举报

8#
发表于 2025-5-14 05:56:20 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

9#
发表于 2025-5-14 08:09:43 | 只看该作者
感谢分享
回复

使用道具 举报

10#
发表于 2025-5-14 08:13:05 | 只看该作者
感谢分享
回复

使用道具 举报

11#
发表于 2025-5-14 08:39:04 | 只看该作者
谢谢楼主分享!
回复

使用道具 举报

12#
发表于 2025-5-14 08:42:42 | 只看该作者
感谢分享
回复

使用道具 举报

13#
发表于 2025-5-14 09:04:32 | 只看该作者
感谢分享
回复

使用道具 举报

14#
发表于 2025-5-14 09:56:42 | 只看该作者
学习了
回复

使用道具 举报

15#
发表于 2025-5-14 11:37:37 | 只看该作者
感谢分享
回复

使用道具 举报

16#
发表于 2025-5-14 14:14:08 | 只看该作者
谢谢分享
回复

使用道具 举报

17#
发表于 2025-5-14 14:18:39 | 只看该作者
很好,感谢分享。。
回复

使用道具 举报

18#
发表于 2025-5-14 17:58:15 | 只看该作者
感谢分享!
回复

使用道具 举报

19#
发表于 2025-5-15 15:26:07 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-5-24 20:16

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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