无忧启动论坛
标题:
批处理系列10:磁盘分区显示与隐藏工具
[打印本页]
作者:
青青草
时间:
2025-5-15 21:59
标题:
批处理系列10:磁盘分区显示与隐藏工具
磁盘分区显示与隐藏工具
@ECHO OFF
Title 磁盘分区显示与隐藏工具 (支持MBR和GPT)
mode con lines=36 cols=74
color 1f
setlocal enabledelayedexpansion
:: 设置临时目录
set "TEMPDIR=%TEMP%\DiskPartTool"
if not exist "%TEMPDIR%" mkdir "%TEMPDIR%"
:: 获取管理员权限
>NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMPDIR%\Getadmin.vbs"
ECHO UAC.ShellExecute "%~f0", "%*", "", "runas", 1 >> "%TEMPDIR%\Getadmin.vbs"
CSCRIPT //Nologo "%TEMPDIR%\Getadmin.vbs"
DEL /f /q "%TEMPDIR%\Getadmin.vbs" 2>NUL
Exit /B
)
:MAIN_MENU
cls
echo.
echo 当前磁盘列表:
echo list disk > "%TEMPDIR%\DiskPart.txt"
echo exit >> "%TEMPDIR%\DiskPart.txt"
diskpart /s "%TEMPDIR%\DiskPart.txt" | find /v "Copyright" | find /v "DiskPart" | find /v "计算机上" | find /v "退出" > "%TEMPDIR%\DiskList.txt"
:: 显示磁盘列表(过滤无关行)
type "%TEMPDIR%\DiskList.txt"
:GET_DISK_NUMBER
echo.
set "choiceDisk="
set /p "choiceDisk=请输入要操作的磁盘编号:"
if not defined choiceDisk goto GET_DISK_NUMBER
:: 检查输入是否全为数字
set "isValid=1"
for /f "delims=0123456789" %%c in ("%choiceDisk%") do set "isValid=0"
if "%isValid%"=="0" (
echo 错误:请输入有效的数字!
goto GET_DISK_NUMBER
)
:: 检查磁盘是否存在
set "diskFound=0"
for /f "tokens=1,2,3,4,5,6,7,8*" %%a in ('type "%TEMPDIR%\DiskList.txt"') do (
if "%%a"=="磁盘" (
set "diskNum=%%b"
if "!diskNum!"=="%choiceDisk%" (
set "diskFound=1"
if "%%h"=="*" (
set "isGPT=1"
) else (
set "isGPT=0"
)
)
)
)
if "%diskFound%"=="0" (
echo 错误:磁盘 %choiceDisk% 不存在!
goto GET_DISK_NUMBER
)
:: 获取分区列表
echo select disk %choiceDisk% > "%TEMPDIR%\DiskPart.txt"
echo list partition >> "%TEMPDIR%\DiskPart.txt"
echo exit >> "%TEMPDIR%\DiskPart.txt"
diskpart /s "%TEMPDIR%\DiskPart.txt"
:GET_PARTITION_NUMBER
echo.
set /p "partitionNum=请输入要操作的分区编号:"
if not defined partitionNum goto GET_PARTITION_NUMBER
:: 检查输入是否全为数字
set "isValid=1"
for /f "delims=0123456789" %%c in ("%partitionNum%") do set "isValid=0"
if "%isValid%"=="0" (
echo 错误:请输入有效的数字!
goto GET_PARTITION_NUMBER
)
if "%isGPT%"=="1" (
goto GPT_OPERATION
) else (
goto MBR_OPERATION
)
:GPT_OPERATION
:: 定义GUID常量
set "HIDE_GUID=dfd3c88e-b098-4f5a-a6a4-2a3a5a5d5b5b"
set "SHOW_GUID=ebd0a0a2-b9e5-4433-87c0-68b6b72699c7"
:: 获取分区详细信息
(
echo select disk !choiceDisk!
echo select partition !partitionNum!
echo detail partition
echo exit
) > %TEMPDIR%\check_status.txt
set "IS_HIDDEN=0"
set "LETTER="
for /f "tokens=1,2 delims=: " %%A in ('diskpart /s %TEMPDIR%\check_status.txt') do (
if "%%A"=="字母" set "LETTER=%%B"
if "%%A"=="类型" if "%%B"=="%HIDE_GUID%" set "IS_HIDDEN=1"
)
del %TEMPDIR%\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 - 磁盘: !choiceDisk!
echo - 分区: !partitionNum!
echo - 操作: !ACTION_DESC!
echo.
set /p "CONFIRM=确认执行(Y/N)? "
if /i "!CONFIRM!" neq "Y" (
echo 操作已取消
pause
goto MAIN_MENU
)
:: 执行操作
(
echo select disk !choiceDisk!
echo select partition !partitionNum!
if "!OPERATION!"=="隐藏" (
if defined LETTER echo remove letter=!LETTER!
echo set id=!GUID!
) else (
echo set id=!GUID!
echo assign
)
echo exit
) > %TEMPDIR%\operation.txt
diskpart /s %TEMPDIR%\operation.txt
del %TEMPDIR%\operation.txt
:: 显示结果
echo.
if "!OPERATION!"=="隐藏" (
if defined LETTER (
echo 成功:分区 !partitionNum! 已隐藏(移除盘符 !LETTER!)
) else (
echo 成功:分区 !partitionNum! 已隐藏(无盘符可移除)
)
) else (
echo 成功:分区 !partitionNum! 已显示
)
echo.
echo 注意:如果分区未立即显示/隐藏,请尝试刷新资源管理器(F5)或重启计算机
echo.
pause
goto MAIN_MENU
:MBR_OPERATION
:: 获取分区详细信息
(
echo select disk !choiceDisk!
echo select partition !partitionNum!
echo detail partition
echo exit
) > "%TEMPDIR%\check_status.txt"
diskpart /s "%TEMPDIR%\check_status.txt" > "%TEMPDIR%\PartInfo.txt"
:: 提取分区类型ID
set "id="
for /f "tokens=2 delims=:" %%a in ('type "%TEMPDIR%\PartInfo.txt" ^| find "类型 :"') do (
for /f "tokens=1" %%b in ("%%a") do (
set "id=%%b"
)
)
if not defined id (
echo 无法获取分区ID!
pause
goto MAIN_MENU
)
:: 根据ID判断操作
if "%id:~0,1%"=="1" (
set operation=显示
set newId=0%id:~1,1%
) else if "%id:~0,1%"=="0" (
set operation=隐藏
set newId=1%id:~1,1%
) else (
echo 分区%partitionNum%的ID类型为: %id%
pause
goto MAIN_MENU
)
:CONFIRM_OPERATION
echo.
set /p "choice=确定%operation%分区%partitionNum%?(Y/N): "
if /i "%choice%"=="N" goto MAIN_MENU
if /i not "%choice%"=="Y" goto CONFIRM_OPERATION
:: 执行操作
(
echo select disk %choiceDisk%
echo select partition %partitionNum%
echo set id=%newId%
echo exit
) > "%TEMPDIR%\DiskPart.txt"
diskpart /s "%TEMPDIR%\DiskPart.txt"
echo.
echo 分区%partitionNum%已成功%operation%!
echo.
pause
goto MAIN_MENU
复制代码
作者:
a114223332
时间:
2025-5-16 02:50
试试,不清楚有没用
作者:
小灰兔
时间:
2025-5-16 04:51
谢谢分享
作者:
newchen2025
时间:
2025-5-16 06:37
谢谢分享
作者:
wang1126
时间:
2025-5-16 06:45
谢谢楼主分享
作者:
dkzzlf
时间:
2025-5-16 07:29
感谢楼主
作者:
jho
时间:
2025-5-16 07:36
感谢分享!!!
作者:
jh198354
时间:
2025-5-16 07:38
谢谢分享!!!
作者:
hainanyingcong
时间:
2025-5-16 07:49
谢谢楼主分享
作者:
dksoft
时间:
2025-5-16 08:33
感谢分享
作者:
wn168cn@163.com
时间:
2025-5-16 08:38
支持原创 试试看
作者:
zzq1392281
时间:
2025-5-16 08:46
支持原创 试试看
作者:
gassnake
时间:
2025-5-16 09:06
谢谢分享
作者:
13433801326
时间:
2025-5-16 09:13
感谢发现
作者:
dayeye
时间:
2025-5-16 09:15
本帖最后由 dayeye 于 2025-5-16 09:23 编辑
显示用了2次,之后不能隐藏。
WIN10-18363.2274 Ramos UEFI+GPT
可能与操作分区BCD被认为当前win引导有关。
实际上系统为G4D引导的内存系统。
是否与RAMOS C的bootstat.dat有关?
作者:
窄口牛
时间:
2025-5-16 09:22
应该是在资源管理器里隐藏就行了吧,没必要去盘符吧?
作者:
loony_316
时间:
2025-5-16 10:12
谢谢分享
作者:
夏日风
时间:
2025-5-16 10:22
谢谢楼主的分享!
作者:
idcicp
时间:
2025-5-16 10:39
谢谢分享
作者:
技束源
时间:
2025-5-16 10:40
谢谢分享
作者:
甲方
时间:
2025-5-16 10:40
谢谢分享
作者:
青青草
时间:
2025-5-16 10:43
dayeye 发表于 2025-5-16 09:15
显示用了2次,之后不能隐藏。
WIN10-18363.2274 Ramos UEFI+GPT
可能与操作分区BCD被认为当前win引导有 ...
分区1 错误:设备使用中
作者:
guong
时间:
2025-5-16 12:08
来看一下
作者:
rengrancunzai
时间:
2025-5-16 12:19
谢谢分享,试试
作者:
wwoldok
时间:
2025-5-16 12:43
感谢分享
作者:
fegr
时间:
2025-5-16 15:47
感谢分享
作者:
壹行情泪
时间:
2025-6-24 22:39
谢谢分享!!!
作者:
加藤鹰王
时间:
2025-6-24 23:03
批处理比三方工具好
作者:
leitian72853
时间:
2025-7-16 15:11
谢谢分享
欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/)
Powered by Discuz! X3.3