脚本库\3_分区工具.bat 编码: GB18030
184 4,253 4.39 KB
返回
@echo off
setlocal enabledelayedexpansion
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit

echo ============================================
echo    分区工具   by:知足常樂  Ver:26.8
echo ============================================
echo.

:retry
cls
echo 正在获取磁盘信息...
(
echo list disk
echo exit
) > %temp%\listdisk
diskpart /s %temp%\listdisk
set "disknum="
echo 请直接按数字键选择磁盘(0-9):
for /f "delims=:" %%a in ('findstr /n "^" "%temp%\listdisk"') do set /a total=%%a
choice /c 0123456789 /n /m ">"
set /a disknum=!errorlevel!-1

:select_partition_type
echo.
echo ============================================
echo           选择分区类型
echo ============================================
echo 0. 返回重新选择磁盘
echo 1. 系统分区 GPT(带EFI)
echo 2. 系统分区 MBR(带300MB引导)
echo 3. 存储分区 GPT(无EFI)
echo 4. 存储分区 MBR(无引导分区)
echo.
echo 请选择分区类型(按0-4):
choice /c 01234 /n /m ">"
if %errorlevel% equ 1 (
    echo 返回重新选择磁盘...
    goto retry
) else if %errorlevel% equ 2 (
    set partition_type=gpt
    set is_system_disk=yes
    echo 选择系统分区GPT
) else if %errorlevel% equ 3 (
    set partition_type=mbr
    set is_system_disk=yes
    echo 选择系统分区MBR
) else if %errorlevel% equ 4 (
    set partition_type=gpt
    set is_system_disk=no
    echo 选择存储分区GPT
) else if %errorlevel% equ 5 (
    set partition_type=mbr
    set is_system_disk=no
    echo 选择存储分区MBR
)

echo.
echo 请选择分区容量:
echo 0. 退出
echo 1. 1个分区(使用全部容量)
echo 2. 60GB
echo 3. 100GB
echo 4. 120GB
echo 5. 200GB
echo 6. 300GB
echo 7. 500GB
echo 8. 自定义容量
echo 9. 清除磁盘(删除所有分区)

:retry_choice
set /p choice=请输入选择 (0-7): 

if "%choice%"=="0" (
    echo 退出程序
    exit /b
) else if "%choice%"=="1" (
    set size=
    set second_partition=no
    echo 创建1个分区(使用全部容量)
) else if "%choice%"=="2" (
    set size=61442
    set second_partition=yes
    echo 60GB
) else if "%choice%"=="3" (
    set size=102402
    set second_partition=yes
    echo 100GB
) else if "%choice%"=="4" (
    set size=122882
    set second_partition=yes
    echo 120GB
) else if "%choice%"=="5" (
    set size=204802
    set second_partition=yes
    echo 200GB
) else if "%choice%"=="6" (
    set size=307202
    set second_partition=yes
    echo 300GB
) else if "%choice%"=="7" (
    set size=512002
    set second_partition=yes
    echo 500GB
) else if "%choice%"=="8" (
    set /p input_gb=请输入自定义容量(GB为单位,输入数字): 
    set /a size=input_gb * 1024 + 2
    set second_partition=yes
    echo 自定义容量: %input_gb% GB = %size% MB
) else if "%choice%"=="9" (
    set operation=clean_only
    echo 仅清除磁盘
) else (
    echo 无效选择:%choice%,请输入0-9之间的数字
    goto retry_choice
)

(
echo select disk !disknum!
if "!operation!"=="clean_only" (
    echo clean
) else (
echo clean

if "!partition_type!"=="mbr" (
    echo convert mbr
    if "!is_system_disk!"=="yes" (
        echo create partition primary size=300
        echo format quick fs=fat32
    )
    if "!size!"=="" (
        echo create partition primary
    ) else (
        echo create partition primary size=!size!
    )
    echo format quick fs=ntfs
    echo assign
    if "!second_partition!"=="yes" (
        echo create partition extended
        echo create partition logical
        echo format quick fs=ntfs
        echo assign
    )
) else (
    echo convert gpt
    if "!is_system_disk!"=="yes" (
        echo create partition efi size=300
        echo format quick fs=fat32 label="EFI"
        echo create partition msr size=16
    )
    if "!size!"=="" (
        echo create partition primary
    ) else (
        echo create partition primary size=!size!
    )
    echo format quick fs=ntfs
    echo assign
    if "!second_partition!"=="yes" (
        echo create partition primary
        echo format quick fs=ntfs
        echo assign
    )
)

)
echo exit
) > "%temp%\autopart"

echo 正在执行分区...
diskpart /s "%temp%\autopart"

if %errorlevel% neq 0 (
    echo 执行失败,错误代码:%errorlevel%
    del "%temp%\autopart"
    del "%temp%\listdisk"
    timeout /t 1 /nobreak >nul
    pause
)

del "%temp%\autopart"
del "%temp%\listdisk"
echo 分区完成!
timeout /t 1 /nobreak >nul
exit /b 0