2015-07-01 61 views
0

我需要創建一個分區和格式化USB驅動器的批處理文件。這是創建一個Windows 7 USB啓動盤。使用DISKPART自動分區磁盤並提示用戶使用磁盤或退出

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

請參閱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

+0

您好發現這個腳本非常有用,並希望用於分區。我只是嘗試從Linux遷移自己。但是,想知道什麼是最好的方式只列出「diskdrives」而不是USB驅動器。如果您可以提供我的代碼段,這將有所幫助 – Ragav