0

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

DISKPART 是使用的工具,您可以将指令传递给它,如下所示:

DISKPART /s 指令.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 上。如果不确定,我也希望能够退出,因为显然格式化错误的驱动器可能很危险。

4

1 回答 1

2

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

Diskpart接受来自脚本文件和标准输入的命令。所以我们可以通过管道向它发送命令以向用户显示信息并检查选择。

以此为基础(另存为.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

于 2015-07-01T10:20:55.470 回答