@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 |
文章来源:
网络小编D
版权声明:
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站立刻删除。