磁盘分区显示与隐藏的bat命令行批处理脚本

@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" (