【问题标题】:Automate partitioning a disk using DISKPART and prompting user for disk or quit使用 DISKPART 自动对磁盘进行分区并提示用户输入磁盘或退出
【发布时间】:2022-05-19 22:01:10
【问题描述】:

我需要创建一个对 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。如果不确定,我也希望能够退出,因为显然格式化错误的驱动器可能很危险。

【问题讨论】:

    标签: windows batch-file disk-partitioning


    【解决方案1】:

    请参阅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 行(不需要)和diskpart 之前的rem

    【讨论】:

    • 您好,发现这个脚本非常有用,希望用于分区。我只是在尝试从 Linux 迁移自己。但是,想知道最好的方法是只列出“磁盘驱动器”而不是 USB 驱动器。如果你能提供给我 sn-p 会很有帮助
    【解决方案2】:

    我很感兴趣,但如果你写的话:

    set /a disknr=0
    

    然后执行:

    diskpart /s list.txt
    

    当 list.txt 包含:

    select disk %disknr%
    list part
    

    你会得到同样好的结果。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 2017-04-24
      • 2016-03-07
      • 2015-01-05
      • 2011-01-09
      • 2021-03-23
      • 2016-02-28
      • 2019-04-02
      相关资源
      最近更新 更多