使用DISKPART自动分区磁盘并提示用户输入磁盘或退出

时间:2015-07-01 09:28:07

标签: windows batch-file disk-partitioning

我需要创建一个分区和格式化USB驱动器的批处理文件。这是为了创建一个Windows 7 USB启动盘。

DISKPART是使用的工具,您可以按照以下方式传递说明:

DISKPART / s instructions.txt

在我的情况下,我希望我的指示看起来像这样:

example prepdisk.txt
SELECT DISK <Prompt user to either enter a number or q for quit>
CLEAN
CREATE PARTITION PRIMARY
FORMAT QUICK FS=NTFS LABEL="Windows"
ACTIVE
ASSIGN LETTER="C"

然后我会有一个这样的批处理文件:

prepdisk.bat:

DISKPART /s prepdisk.txt

但我仍然坚持如何提示用户输入磁盘ID。我还希望能够退出,如果不确定,因为显然格式化错误的驱动器可能是危险的。

1 个答案:

答案 0 :(得分:1)

请参阅set /?帮助。您需要使用set /p var=promptText向用户询问输入。用户类型将存储在指示的变量中。

Diskpart接受来自脚本文件和stdin的命令。因此,我们可以向其发送命令以向用户显示信息并检查选择。

将此作为基础(另存为.cmd文件)并根据您的需要进行调整。

@echo off
    setlocal enableextensions disabledelayedexpansion

:ask
    rem select disk to format
    call :showDiskTable
    set /p "diskNumber=Type number of disk to format: " || goto :processCancelled

    rem test disk selection
    (   echo select disk %diskNumber%
        echo list disk
    ) | diskpart | findstr /b /c:"*" >nul || (
        echo(
        echo WRONG SELECTION
        echo(
        goto :ask
    )

    rem confirm disk selection
    cls
    call :showDiskTable
    set "answer=%random%%random%"
    set /p "confirm=If you are sure you want to format disk %diskNumber%, type %answer%:"
    if not "%confirm%"=="%answer%" goto :processCancelled

    rem Create script file
    set "scriptFile=%temp%\%~nx0.%random%%random%%random%.tmp"
    > "%scriptFile%" (
        echo SELECT DISK %diskNumber%
        echo CLEAN
        echo CREATE PARTITION PRIMARY
        echo FORMAT QUICK FS=NTFS LABEL="Windows"
        echo ACTIVE
        echo ASSIGN LETTER="C"
    )

    rem execute script file
    type "%scriptFile%"
    rem diskpart /s "%scriptFile%"

    rem cleanup and exit
    del /q "%scriptFile%"

    echo(
    echo DONE
    echo(

    exit /b 0

:showDiskTable
    echo =====================================================
    echo list disk | diskpart | findstr /b /c:" "
    echo =====================================================
    echo(
    goto :eof

:processCancelled
    echo(
    echo PROCESS CANCELLED
    echo(
    exit /b 1

请注意,对于测试,diskpart /s file已禁用,生成的脚本仅回显到控制台。如果一切正常,请移除type行(不需要)和rem之前的diskpart