无忧启动论坛
标题:
批处理系列9:GPT磁盘的显示与隐藏
[打印本页]
作者:
青青草
时间:
2025-5-13 17:27
标题:
批处理系列9:GPT磁盘的显示与隐藏
本帖最后由 青青草 于 2025-5-14 00:10 编辑
GPT磁盘的显示与隐藏
@echo off
Title GPT磁盘的显示与隐藏
setlocal enabledelayedexpansion
:: 显示操作菜单
echo.
echo [1] 隐藏分区(修改GUID+移除盘符)
echo [2] 显示分区(恢复GUID+分配盘符)
echo.
set /p "CHOICE=请选择操作(1/2): "
:: 验证输入
if "!CHOICE!" neq "1" if "!CHOICE!" neq "2" (
echo 错误:无效选择
pause
exit /b
)
:: 设置GUID
if "!CHOICE!"=="1" (
set "OPERATION=隐藏"
set "GUID=dfd3c88e-b098-4f5a-a6a4-2a3a5a5d5b5b"
) else (
set "OPERATION=显示"
set "GUID=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7"
)
:: 自动显示磁盘列表
echo.
echo 正在获取磁盘信息...
(
echo list disk
echo exit
) > %temp%\list_disks.txt
diskpart /s %temp%\list_disks.txt
del %temp%\list_disks.txt
:: 获取磁盘选择
echo.
set /p "DISK_NUMBER=请输入磁盘编号: "
:: 自动显示分区列表
echo.
echo 正在获取分区信息...
(
echo select disk !DISK_NUMBER!
echo list partition
echo exit
) > %temp%\list_partitions.txt
diskpart /s %temp%\list_partitions.txt
del %temp%\list_partitions.txt
:: 获取分区选择
echo.
set /p "PARTITION_NUMBER=请输入分区号: "
:: 确认操作
echo.
echo 即将执行操作:
echo - 磁盘: !DISK_NUMBER!
echo - 分区: !PARTITION_NUMBER!
echo - 操作: !OPERATION!
echo.
set /p "CONFIRM=确认执行?(Y/N): "
if /i "!CONFIRM!" neq "Y" (
echo 操作已取消
pause
exit /b
)
:: 获取当前盘符(仅隐藏操作时需要)
if "!CHOICE!"=="1" (
(
echo select disk !DISK_NUMBER!
echo select partition !PARTITION_NUMBER!
echo detail partition
echo exit
) > %temp%\get_letter.txt
set "LETTER="
for /f "tokens=2 delims=: " %%L in ('diskpart /s %temp%\get_letter.txt ^| find "字母"') do (
set "LETTER=%%L"
)
del %temp%\get_letter.txt
)
:: 执行操作
(
echo select disk !DISK_NUMBER!
echo select partition !PARTITION_NUMBER!
if "!CHOICE!"=="1" (
if defined LETTER echo remove letter=!LETTER!
echo set id=!GUID!
) else (
echo set id=!GUID!
echo assign
)
echo exit
) > %temp%\operation.txt
diskpart /s %temp%\operation.txt
del %temp%\operation.txt
:: 显示结果
echo.
if "!CHOICE!"=="1" (
if defined LETTER (
echo 成功:分区 !PARTITION_NUMBER! 已隐藏(移除盘符 !LETTER!)
) else (
echo 成功:分区 !PARTITION_NUMBER! 已隐藏(无盘符可移除)
)
) else (
echo 成功:分区 !PARTITION_NUMBER! 已显示
)
echo 注意:如果分区未立即显示/隐藏,请尝试刷新资源管理器(F5)或重启计算机
pause
复制代码
更新:
@echo off
Title GPT磁盘的显示与隐藏
mode con lines=36 cols=74
color 1f
setlocal enabledelayedexpansion
:: 获取管理员权限
>NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
ECHO UAC.ShellExecute "!%~f0!", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
CSCRIPT //Nologo "%TEMP%\Getadmin.vbs"& DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL& Exit)
pushd "%CD%"&& CD /D "%~dp0"
:: 定义GUID常量
set "HIDE_GUID=dfd3c88e-b098-4f5a-a6a4-2a3a5a5d5b5b"
set "SHOW_GUID=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7"
:MAIN_MENU
cls
echo.
echo 当前磁盘列表:
(
echo list disk
echo exit
) > %temp%\list_disks.txt
diskpart /s %temp%\list_disks.txt
del %temp%\list_disks.txt
:: 获取磁盘选择
echo.
set /p "DISK_NUMBER=请输入磁盘编号: "
:: 自动显示分区列表
echo.
echo 正在获取分区信息...
(
echo select disk !DISK_NUMBER!
echo list partition
echo exit
) > %temp%\list_partitions.txt
diskpart /s %temp%\list_partitions.txt
del %temp%\list_partitions.txt
:: 获取分区选择
echo.
set /p "PARTITION_NUMBER=请输入分区号: "
:: 检查分区当前状态
(
echo select disk !DISK_NUMBER!
echo select partition !PARTITION_NUMBER!
echo detail partition
echo exit
) > %temp%\check_status.txt
set "IS_HIDDEN=0"
set "LETTER="
for /f "tokens=1,2 delims=: " %%A in ('diskpart /s %temp%\check_status.txt') do (
if "%%A"=="字母" set "LETTER=%%B"
if "%%A"=="类型" if "%%B"=="%HIDE_GUID%" set "IS_HIDDEN=1"
)
del %temp%\check_status.txt
:: 根据状态提示用户
if !IS_HIDDEN! equ 1 (
echo.
echo 该分区当前状态: 已隐藏
set "OPERATION=显示"
set "GUID=!SHOW_GUID!"
set "ACTION_DESC=显示该分区"
) else (
echo.
echo 该分区当前状态: 已显示
if defined LETTER echo 当前盘符: !LETTER!
set "OPERATION=隐藏"
set "GUID=!HIDE_GUID!"
set "ACTION_DESC=隐藏该分区"
)
:: 确认操作
echo.
echo 即将执行操作:
echo - 磁盘: !DISK_NUMBER!
echo - 分区: !PARTITION_NUMBER!
echo - 操作: !ACTION_DESC!
echo.
set /p "CONFIRM=确认执行(Y/N)? "
if /i "!CONFIRM!" neq "Y" (
echo 操作已取消
pause
goto MAIN_MENU
)
:: 执行操作
(
echo select disk !DISK_NUMBER!
echo select partition !PARTITION_NUMBER!
if "!OPERATION!"=="隐藏" (
if defined LETTER echo remove letter=!LETTER!
echo set id=!GUID!
) else (
echo set id=!GUID!
echo assign
)
echo exit
) > %temp%\operation.txt
diskpart /s %temp%\operation.txt
del %temp%\operation.txt
:: 显示结果
echo.
if "!OPERATION!"=="隐藏" (
if defined LETTER (
echo 成功:分区 !PARTITION_NUMBER! 已隐藏(移除盘符 !LETTER!)
) else (
echo 成功:分区 !PARTITION_NUMBER! 已隐藏(无盘符可移除)
)
) else (
echo 成功:分区 !PARTITION_NUMBER! 已显示
)
echo 注意:如果分区未立即显示/隐藏,请尝试刷新资源管理器(F5)或重启计算机
pause
goto MAIN_MENU
复制代码
作者:
小灰兔
时间:
2025-5-13 17:32
感谢分享
作者:
dayeye
时间:
2025-5-13 18:05
谁来试一下?看看效果?
作者:
wn168cn@163.com
时间:
2025-5-13 20:08
感谢分享
作者:
甲方
时间:
2025-5-13 20:22
进来学习一下
作者:
yzydys
时间:
2025-5-13 22:21
感谢楼主分享
作者:
2013qq413958
时间:
2025-5-13 22:31
感谢分享
作者:
wang1126
时间:
2025-5-14 05:56
谢谢楼主分享
作者:
怀中猫chat
时间:
2025-5-14 08:09
感谢分享
作者:
feimao888
时间:
2025-5-14 08:13
感谢分享
作者:
toptop
时间:
2025-5-14 08:39
谢谢楼主分享!
作者:
13433801326
时间:
2025-5-14 08:42
感谢分享
作者:
86933924
时间:
2025-5-14 09:04
感谢分享
作者:
12956
时间:
2025-5-14 09:56
学习了
作者:
aaa123456789
时间:
2025-5-14 11:37
感谢分享
作者:
guong
时间:
2025-5-14 14:14
谢谢分享
作者:
lomey
时间:
2025-5-14 14:18
很好,感谢分享。。
作者:
handsome_xiang
时间:
2025-5-14 17:58
感谢分享!
作者:
fegr
时间:
2025-5-15 15:26
谢谢分享
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/)
Powered by Discuz! X3.3