首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DISKPART自动分区磁盘,并提示用户选择磁盘或退出

使用DISKPART自动分区磁盘,并提示用户选择磁盘或退出
EN

Stack Overflow用户
提问于 2015-07-01 09:28:06
回答 2查看 4.3K关注 0票数 0

我需要创建一个批处理文件,对USB驱动器进行分区和格式化。这是为了创建一个Windows 7 USB引导磁盘。

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

DISKPART /s instructions.txt

在我的例子中,我希望我的指令看起来像这样:

代码语言:javascript
复制
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:

代码语言:javascript
复制
DISKPART /s prepdisk.txt

但是,我在如何提示用户输入磁盘id方面遇到了困难。我也希望能够退出,如果不确定,因为显然格式化错误的驱动器可能是危险的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-01 10:20:55

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

Diskpart接受来自脚本文件和stdin的命令。因此,我们可以通过管道命令将信息显示给用户,并检查所选内容。

使用它作为一个基础(保存为一个.cmd文件)并适应您的需要。

代码语言:javascript
复制
@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

票数 2
EN

Stack Overflow用户

发布于 2022-05-19 14:01:10

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

代码语言:javascript
复制
set /a disknr=0

然后执行:

代码语言:javascript
复制
diskpart /s list.txt

当list.txt包含:

代码语言:javascript
复制
select disk %disknr%
list part

你得到了同样好的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31157522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档