32 gig usb bootable windows 10 setup drive

Page 1 of 2 12 LastLast

  1. Posts : 130
    Windows 10 Pro
       #1

    32 gig usb bootable windows 10 setup drive


    I have a 32 gig Usb flash drive. That I would like to have 3 partitions one 1Gig ,1-8gig the rest23 gig. With these drive letters x,y,z.
    X-boot
    Y-windows
    Z-apps
    After windows is installed then the apps will be installed.
    (All the batch files that run the apps are on this drive!)
    Can this be done?
    John
      My Computer


  2. Posts : 23,368
    Win 10 Home ♦♦♦19045.4355 (x64) [22H2]
       #2

    RBCC said:
    I have a 32 gig Usb flash drive. That I would like to have 3 partitions one 1Gig ,1-8gig the rest23 gig. With these drive letters x,y,z.
    X-boot
    Y-windows
    Z-apps
    After windows is installed then the apps will be installed.
    (All the batch files that run the apps are on this drive!)
    Can this be done?
    John


    Yes.
    Just make the Windows installation media, then "shrink/move" it (say... 8gb), to one end of the USB stick, then make a partition with what ever is left... for your apps.
      My Computer


  3. Posts : 8,109
    windows 10
       #3

    That's not clear you say X will be boot are you trying to boot from it into windows?
      My Computer


  4. Posts : 6,386
    Windows 11 Pro - Windows 7 HP - Lubuntu
       #4

    Windows by default won't install on a USB drive. You have to do a workaround. Not recommended.

    You didn't mention if the drive will be booting as Legacy or UEFI
    Answering your question, you can make the partitions as follow:

    Open a CMD window as administrator and type:

    diskpart
    list disk (it will list all drives. Identify the USB drive number)
    select disk n (replace n by the USB drive number obtained with list disk)
    clean
    convert mbr
    create partition primary size=1000
    select part 1
    format fs=fat32 quick
    assign letter=X
    active
    create partition primary size=8000
    select part 2
    format fs=NTFS quick
    assign letter=Y
    create partition primary
    select part 3
    format fs=NTFS quick
    assign letter=Z
    exit (to exit diskpart)
    Last edited by Megahertz; 15 Jun 2023 at 18:13.
      My Computers


  5. Posts : 18,426
    Windows 11 Pro
       #5

    Are you talking about a flash drive to install Windows with, or are you talking about running a full Windows system from the flash drive?
      My Computer


  6. Posts : 4,158
    Windows 11 Pro, 22H2
       #6

    John,

    As others have noted, we are not certain if your intention was to actually install a running copy of Windows on the second partition or not, however, I am going to assume that this is NOT your intention since 8GB is too small to do that anyway.

    My assumption is that you want to use the first two partitions to hold a bootable Windows image for the purpose of installation onto a system.

    If I have that right, below is a batch file that will completely automate the process for you.

    As posted, without making any changes, the batch file will create a 1GB FAT32 partition on your flash drive as well as an 8GB NTFS partition and will turn those partitions into a bootable Windows installation media.

    When the batch file is done, you can create another partition with the remaining space using either diskpart or Disk Management.

    NOTE: If you open the batch file in Notepad, you will see that there are a number of user defined variables near the top of the batch file, all explained in detail, that you can change to modify the behavior of the batch file.

    If you want to see this customized in any way (such as automatically creating the third partition), please let me know and I would be happy to modify it.

    If you have any questions, please do let me know.

    EDIT: The below batch file was just updated. If you grabbed it before, you may want to grab the new one now. You can verify by looking at the version number a few lines down from the top.

    Code:
    @echo off
    setlocal enabledelayedexpansion
    setlocal enableextensions
    cd /d %~dp0
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: This batch file will allow you to create a Windows installation disk. This can be a flash drive, HDD or   ::
    :: an SSD. It is designed to create a drive that will boot on either a BIOS or UEFI based system and it is   ::
    :: perfectly fine for any files in the installation media to be larger than 4 GB.                            ::
    ::                                                                                                           ::
    :: Note that Windows 11 is only available in 64-bit editions, while Windows 10 is available in both 32-bit   ::
    :: and 64-bit editions. Since this batch file is perfectly capable of creating dual architecture media it is ::
    :: perfectly suitable for the creation of both Windows 10 and Windows 11 boot media, regardless of whether   ::
    :: the image is 32-bit or 64-bit.                                                                            ::
    ::                                                                                                           ::
    :: Originally created December 2020 by HSehestedt and Ztruker                                                ::
    :: Last updated June 15, 2023                                                                                ::
    ::                                                                                                           ::
    :: Version 1.25.08                                                                                           ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Explanation of User Customizable Settings ::                                                                   ::
    :::::::::::::::::::::::::::::::::::::::::::::::                                                                   ::
    :: Set the variables below to customize the behavior of the batch file.                                           ::
    ::                                                                                                                ::
    :: NOTE: Values supplied can be either uppercase, lowercase, or mixed case. However, please note that for the     ::
    ::    FAT32 partition, the volume name will be automatically converted to uppercase since FAT32 volume names can  ::
    ::    only be uppercase.                                                                                          ::
    ::                                                                                                                ::
    :: HideDetails - Set to "Y" to hide the details of every file being copied. Set to "N" or anything other than     ::
    ::    "Y" to show the detailed copy status. May be helpful for troubleshooting.                                   ::
    ::                                                                                                                ::
    :: Partition1Size - This specifies the size in MB to create the first FAT32 partition. Suggestion: 1000 MB        ::
    ::    (roughly 1GB) should be a good value for most situations. Use a number only (no MB after the number). If    ::
    ::    you use a customized image with many Windows editions, it's possible that you may need to increase the size ::
    ::    of this partition.                                                                                          ::
    ::                                                                                                                ::
    :: Part2SizeLimit - Set to either "N" or a numerical value. If you set this to "N", the size of the 2nd           ::
    ::    partition will be unlimited and will be created with all the remaining space not used by partition 1. If    ::
    ::    you would like to limit the size of the partition, specify a size in MB to create this partition.           ::
    ::    Note: 1 GB would be 1000 and 1 TB would be 1000000 (DON'T USE A COMMA IN VALUE!). Limiting the size is      ::
    ::    useful if you want to add other partitions to the drive. For example, I have a flash drive that I can       ::
    ::    install Windows from, but it also has another partition that is BitLocker protected with all my software    ::
    ::    applications, personal documents, etc.                                                                      ::
    ::                                                                                                                ::
    :: Part2FS - This sets the filesystem type to use on the 2nd partition. Either exFAT or NTFS can be specified.    ::
    ::    Set this value to either "NTFS" or "exFAT". My personal preference is to always use NTFS.                   ::
    ::                                                                                                                ::
    :: Partition1Name - This is the volume label to give the first partition. Since this is a FAT32 partition, the    ::
    ::    volume label is limited to 11 characters.                                                                   ::
    ::                                                                                                                ::
    :: Partition2Name - This is the volume label to give the second partition. If you choose to use exFAT you are     ::
    ::    limited to 11 characters. With NTFS you have up to 32 characters. Note that by default we use the name      ::
    ::    PAR-2-%Part2FS%. The %Part2FS% is the variable that contains either NTFS or exFAT (whichever you specified  ::
    ::    for that variable). Of course, you do not have to use this and can modify it if you wish.                   ::
    ::                                                                                                                ::
    :: PartType - Set to either MBR or GPT. Normally, leave this set to MBR. An MBR partition type will allow for the ::
    ::    greatest compatibility with both BIOS and UEFI based systems. However, it is limited to disks with up to    ::
    ::    2TB in size. If you plan to use a disk larger than 2TB you must specify a GPT partition type. Please be     ::
    ::    aware that doing this will limit compatibility so that it will not work on BIOS based systems.              ::
    ::                                                                                                                ::
    :: AutoDismount - Set this to Y if you want the source ISO image to be automatically dismounted by this batch     ::
    ::    file when it is done running. If you do NOT want the image dismounted, set this to N. NOTE: Technically,    ::
    ::    the image will be dismounted when set to anything other than N.                                             ::
    ::    IMPORTANT: Set this to Y only if the source is an ISO image. If you are pointing to a folder on a drive,    ::
    ::    then this should be set to N.
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    
    :: User defined variables
    
    set HideDetails=Y
    set Partition1Size=1000
    set Part2SizeLimit=N
    set Part2FS=NTFS
    set Partition1Name=PAR-1-FAT32
    set Partition2Name=PAR-2-%Part2FS%
    set PartType=MBR
    set AutoDismount=Y
    
    :: End of user defined variables
    
    :start
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Check to see if this batch file is being run as Administrator. If it is not, then rerun the batch file ::
    :: automatically as admin and terminate the intial instance of the batch file.                            ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    (Fsutil Dirty Query %SystemDrive%>Nul)||(PowerShell start """%~f0""" -verb RunAs & Exit /B)
    
    ::::::::::::::::::::::::::::::::::::::::::::::::
    :: End Routine to check if being run as Admin ::
    ::::::::::::::::::::::::::::::::::::::::::::::::
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: We reach this point once the batch file is run as admin ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Convert all variable values to uppercase to make handling easier. ::
    :: We do this by calling a user function called TOUPPERCASE.         ::
    ::                                                                   ::
    :: NOTE: We do NOT convert the volume name for the 2nd partition to  ::
    :: uppercase since lowercase volume names are valid for both exFAT   ::
    :: and NTFS partitions.                                              ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    call ::TOUPPERCASE HideDetails
    call ::TOUPPERCASE Partition1Size
    call ::TOUPPERCASE Part2SizeLimit
    call ::TOUPPERCASE Part2FS
    call ::TOUPPERCASE Partition1Name
    call ::TOUPPERCASE PartType
    call ::TOUPPERCASE AutoDismount
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: If the user wants to hide the details of files being copied, we append a "/nfl /ndl" to the end     ::
    :: of robocopy commands. By setting a flag to either nothing or to "/nfl /ndl" we can use the same     ::
    :: commands and the variable "flag" at the end of each command will determine how the command behaves. ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if %HideDetails%==Y (
    set flag=/nfl /ndl
    ) ELSE (
    set flag=
    )
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Change the console mode to 120 columns wide by 25 lines high ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    mode con: cols=120 lines=25
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Ask user for location of mounted ISO image or the directory containing the Windows files ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    cls
    echo Introduction
    echo ============
    echo.
    echo This batch file will create a bootable flash drive from a mounted Windows ISO image or an image extracted to disk.
    echo If you are using an ISO image, mount it before you continue by double-clicking the ISO image and note the drive
    echo letter to which it is mounted.
    echo.
    echo You will be asked if you want to wipe the destination disk or perform a refresh operation. If this is the first
    echo time preparing the disk, use the WIPE option. Be aware that this will destroy ALL data currently on the disk^^!
    echo.
    echo If you choose the REFRESH option, you will be asked for the drive letter of the two partitions previously
    echo created on the disk. We will then replace the files on these partitions with those from the source that you
    echo specify. This is especially helpful if you create additional partitions on the disk because it will update
    echo the first two partitions while leaving any additional partitions intact. 
    echo.
    pause
    cls
    echo Do you want to perform a WIPE operation or a REFRESH operation?
    echo.
    choice /C WR /N /M "Press W or R to respond:"
    if errorlevel 2 set WipeRefresh=REFRESH & goto GetSourcePath
    if errorlevel 1 set WipeRefresh=WIPE & goto GetSourcePath
    
    :GetSourcePath
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Get the path to the Windows source files.                           ::
    :: Tip: The path can end with or without a backslash (\). For example, ::
    :: either D:, D:\, D:\ISO_Files, D:\ISO_Files\ are all valid paths.    ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    cls
    echo Please enter the path to the SOURCE where your Windows files are located. This location can be a folder on a
    echo HDD, SSD, etc. or it can be a mounted Windows ISO image. The path can end with or without a backslash (\).
    echo The following are all examples of valid paths:
    echo.
    echo D:, D:\, D:\ISO_Files, D:\ISO_Files\ are all valid paths.
    echo.
    echo Enter the path to the SOURCE where your Windows files are located below.
    echo.
    :GetSourcePath
    set /p SourcePath="Enter source path: "
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Add a trailing backslash (\) if one does not exist ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    IF NOT "%SourcePath:~-1%"=="\" (
    set SourcePath=%SourcePath%\
    )
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Any valid Windows boot media will have a file called "boot\bootfix.bin" on the drive. This is true for both ::
    :: single architecture images (x64 or x86) or for images with dual architectures. We will do a simple check to ::
    :: see if such a file exists as a basic test for a valid source image location.                                ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if NOT EXIST %SourcePath%boot\bootfix.bin (
    cls
    echo The location that you specified does not contain a valid Windows image. Please try another location.
    echo If you are specifying a location on disk, please be sure to specify the location to the root of the
    echo Windows image. If you are using an ISO image, you should double-click the ISO image to mount it and
    echo note the drive letter to which it was mounted.
    echo.
    goto GetSourcePath
    )
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: The directory structure for a dual architecture image (one that has BOTH x64 and x86 images) will include    ::
    :: \x64 and \x86 folders. In order for us to properly handle this, we need to determine if the source specified ::
    :: is a single of dual architecture image. To do so, we will simply check for the existance on a \x64 folder.   ::
    :: The variable Architecture will be set to either SINGLE or DUAL.                                              ::
    ::                                                                                                              ::
    :: TIP: Windows 11 is only available in 64-bit editions. As a result, you will never have a dual architecture   ::
    :: edition of Windows 11.                                                                                       ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if exist %SourcePath%\x64 (
    set Architecture=DUAL
    ) ELSE (
    set Architecture=SINGLE
    )
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: If a refresh operation was selected, then we need to ask the user for the drive letter associated ::
    :: with the partitions. Otherwise, we need to identify what disk will be wiped.                      ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    If %WipeRefresh%==WIPE goto GetDiskNum
    
    :GetPar1Letter
    
    cls
    echo Please enter the drive letter of the FIRST partition (the FAT32 partition) on the disk that we will refresh. Please
    echo enter a drive letter only with no colon (:).
    echo.
    set /P Partition1="Drive letter of FIRST partition: "
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: As a safety check, verify that the first partition has a file \boot\bootfix.bin ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if exist %Partition1%:\boot\bootfix.bin goto GetPar2Letter
    cls
    echo ERROR! Either the drive letter you specified does not exist or it does not seem to contain a previously
    echo created partition with suitable Windows installation files.
    echo.
    echo Please verify that you have specified the correct drive letter.
    echo.
    pause
    goto GetPar1Letter
    
    :GetPar2Letter
    
    cls
    echo Please enter the drive letter of the SECOND partition (the exFAT or NTFS partition) on the disk that we will
    echo refresh. Please enter a drive letter only with no colon (:).
    echo.
    set /P Partition2="Drive letter of SECOND partition: "
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: As a safety check, verify that the second partition has either a \sources or a \x64 folder. ::
    :: A \sources folder will exist for either an x64 or x86 image, while \x64 and \x86 folders    ::
    :: will exist only on a dual architecture image. We only need to check for one of these to     ::
    :: know if the image is dual architecture. In this batch file, we just check for the existance ::
    :: of an \x64 folder.                                                                          ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if exist %Partition2%:\Sources goto Par2Valid
    if exist %Partition2%:\x64 goto Par2Valid
    
    cls
    echo ERROR! Either the drive letter you specified does not exist or it does not seem to contain a previously
    echo created partition with suitable Windows installation files.
    echo.
    echo Please verify that you have specified the correct drive letter.
    echo.
    pause
    goto GetPar2Letter
    
    :Par2Valid
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Since we are performing a refresh operation, there is no need for us to get a disk number. We will ::
    :: skip that and proceed to the summary screen.                                                       ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    goto Summary
    
    :GetDiskNum
    
    :::::::::::::::::::::::::::::::::::::::::::::::::
    :: Display a list of disks seen by the system. ::
    :::::::::::::::::::::::::::::::::::::::::::::::::
    
    cls
    (echo list disk
    echo exit
    ) | diskpart
    
    echo.
    echo Above is a list of disks connected to your system. Scroll up if the list is too long.
    echo CAUTION: *MAKE SURE* that you specify the correct disk because it will be erased. Press CTRL + C to abort.
    echo.
    set /p DiskID="Enter the disk number for the DESTINATION disk (Enter only the number and press ENTER): "
    
    if [%DiskID%] EQU [] Goto GetDiskNum
    
    :Summary
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Display a summary of options that will be used and get confirmation ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    cls
    echo Summary of options you have selected:
    echo.
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: These summary items apply to both WIPE and REFRESH operations ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    call ::TOUPPERCASE SourcePath
    echo Path for the source files: %SourcePath%
    
    if %HideDetails%==Y (
    echo File copy status details WILL NOT be displayed
    ) ELSE (
    echo File copy status details WILL be displayed
    )
    
    if %AutoDismount%==Y (
    echo The ISO image will be automatically dismounted when we are done with it
    )
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: The summary items below apply only to WIPE operations, so if a ::
    :: REFRESH is being performed, skip this section                  ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if %WipeRefresh%==REFRESH goto RefreshSummary
    
    echo Drive number to make bootable: %DiskID%
    echo Partition type: %PartType%
    echo Partition 1 size: %Partition1Size% MB
    echo Partition 2 filesystem type: %Part2FS%
    
    if NOT %Part2SizeLimit%==N (
    echo Partition 2 size: %Part2SizeLimit% MB
    ) ELSE (
    echo Partition 2 size: Use all remaining space
    )
    
    echo Partition 1 volume label: %Partition1Name%
    echo Partition 2 volume label: %Partition2Name%
    
    goto GetConfirmation
    
    :RefreshSummary
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: These items apply only to a REFRESH operation. ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    call ::TOUPPERCASE Partition1
    call ::TOUPPERCASE Partition2
    echo Drive letter of FIRST partition to refresh: %Partition1%:
    echo Drive letter of SECOND partition to refresh: %Partition2%:
    
    :GetConfirmation
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Time to get final confirmation from user. If the user does not confirm ::
    :: that everything is correct, show some possible resolutions.            ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    echo.
    choice /C YN /N /M "Is this correct? (Press Y or N to respond):"
    if errorlevel 2 (
    cls
    echo.
    echo        Symptom                                            Corrective Action
    echo        =======                                            =================
    echo Source path is wrong:                 Run the program again and respond with the correct path
    echo Wrong drive number for a WIPE:        Run the program again and respond with the correct drive number
    echo Wrong drive letters for a REFRESH:    Run the program again and respond with the correct drive letters
    echo File copy status display incorrect:   Change the setting of "HideDetails" at start of program
    echo Wrong partition sizes:                Change the setting of "Partition1Size" or "Part2SizeLimit" at start of program
    echo Wrong volume labels for a WIPE:       Change the setting of "Partition1Name" or "Partition2Name" at start of program
    echo Wrong partition type:                 Change the setting of "PartType" at start of program
    echo.
    pause
    exit
    )
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: We are creating 2 partions. A FAT32 partition and an exFAT or NTFS partition. We only need the \sources  ::
    :: folder on the exFAT or NTFS partition. On the FAT32 partition, we want everything else. We also want the ::
    :: single file called BOOT.WIM in the \sources folder on the FAT32 partition.                               ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    cls
    if %WipeRefresh%==WIPE echo We are performing the initial partitioning the destination drive to free up any used drive letters.
    if %WipeRefresh%==REFRESH echo We are refreshing drives %Partition1%: and %Partition2%:. Other partitions will be left alone.
    echo Please be patient^^! This can take a while if your drive is slow.
    echo.
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: If we are performing a REFRESH, then there are a lot of steps that we can skip. ::
    :: As a result, we will skip to the CopyOperations section.                        ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if %WipeRefresh%==REFRESH goto CopyOperations
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: We will first wipe the selected disk. This will free up any drive letters currently used by that disk. ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: NOTE: A problem has been observed recently where the CLEAN command run within DiskPart will fail the first   ::
    :: time that it is run. However, this problem only happens when the disk is MBR, not GPT. As a result, we first ::
    :: perform a clean and convert to GPT twice and only then do we finally set the disk to the correct type (MBR   ::
    :: or GPT) based on user preference. These steps ensure that the operation will succeed.                        ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    (echo select disk %DiskID%
    echo clean
    echo convert gpt
    echo clean
    echo convert gpt
    echo clean
    echo convert %PartType%
    echo rescan
    echo exit
    ) | diskpart > nul
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Ask user for drive letters to assign to the partitions on the destination drive ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    :GetPar1DriveLetter
    
    cls
    echo Please enter the drive letter to assign to the FIRST partition (the FAT32 partition). Please enter
    echo a drive letter only with no colon (:).
    echo.
    set /p Partition1="Enter the drive letter to assign to Partition #1: "
    
    if exist %Partition1%: (
    echo.
    echo That drive letter is already in use. Please choose another.
    echo.
    pause
    goto GetPar1DriveLetter
    )
    
    :GetPar2DriveLetter
    
    cls
    echo Please enter the drive letter to assign to the SECOND partition (the NTFS partition). Please enter
    echo a drive letter only with no colon (:).
    echo.
    set /p Partition2="Enter the drive letter to assign to Partition #2: "
    
    if exist %Partition2%: (
    echo.
    echo That drive letter is already in use. Please choose another.
    echo.
    pause
    goto GetPar2DriveLetter
    )
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Capitalize the drive letters. This serves no real purpose other than ::
    :: making the output of the messages below look a bit better when we    ::
    :: confirm the drive letter assignments.                                ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    call ::TOUPPERCASE Partition1
    call ::TOUPPERCASE Partition2
    
    :::::::::::::::::::::::::::::::::
    :: Prepare the first partition ::
    :::::::::::::::::::::::::::::::::
    
    cls
    echo The first partition will be assigned drive letter %Partition1%: and will be formatted with FAT32.
    
    (echo select disk %DiskID%
    echo create partition primary size=%Partition1Size%
    echo format fs=fat32 quick
    echo assign letter=%Partition1%
    echo active
    echo rescan
    echo exit
    ) | diskpart > nul
    
    ::::::::::::::::::::::::::::::::::
    :: Prepare the second partition ::
    ::::::::::::::::::::::::::::::::::
    
    echo The second partition will be assigned drive letter %Partition2%: and will be formatted with %Part2FS%.
    echo.
    
    if %Part2SizeLimit%==N goto NoSizeLimit
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: User has elected to create the second partition with a specific size ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    (echo select disk %DiskID%
    echo create partition primary size=%Part2SizeLimit%
    echo format fs=%Part2FS% quick
    echo assign letter=%Partition2%
    echo rescan
    echo exit
    ) | diskpart > nul
    
    goto PartitionsCreated
    
    :NoSizeLimit
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: User has elected create the second partition with all remaining space ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    (echo select disk %DiskID%
    echo create partition primary
    echo format fs=%Part2FS% quick
    echo assign letter=%Partition2%
    echo rescan
    echo exit
    ) | diskpart > NUL
    
    :PartitionsCreated
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Set volume labels on the two partitions that we just created. ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    label %Partition1%:%Partition1Name%
    label %Partition2%:%Partition2Name%
    
    :CopyOperations
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: This section is for the copy operations from SOURCE to DESTINATION ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Technical Notes:                                                                                                 ::
    ::                                                                                                                  ::
    :: Some flash drives present themselves as a fixed disk and as a result they my have a recyle bin folder on them.   ::
    :: We are excluding the system folders which includes the recycle bin from the following operation. The /njh and    ::
    :: /njs switches prevent robocopy from displaying the header and summary information. If you want to stop robocopy  ::
    :: from displaying file copy progress just add a /nfl /ndl (No File Listing and No Directory Listing) to each       ::
    :: robocopy command. Note that if the user elected to hide details of the copy operation, then the variable "flag"  ::
    :: will be set to "/nfl /ndl" which will hide the directory and file listings.                                      ::
    ::                                                                                                                  ::
    :: Sometimes a path enclosed in quotes does not work in robocopy unless you add a trailing space. We use quotes     ::
    :: just in case a path with spaces in the name is specified by the user.                                            ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if %HideDetails%==Y (
    echo Please be aware that the copying of files may take quite a while if your media is slow. Since you
    echo have the variable called HideDetails set to Y, you will see no status below while files are being
    echo copied. Please be patient and allow the process to finish.
    echo.
    )
    
    if %Architecture%==DUAL goto DualArchitecture
    
    ::::::::::::::::::::::::::::::::::::::::::
    :: Copying files to the FAT32 partition ::
    ::::::::::::::::::::::::::::::::::::::::::
    
    robocopy "%SourcePath% " %Partition1%:\ /mir /xd sources "system volume information" $recycle.bin /njh /njs %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler1
    robocopy "%SourcePath%sources " %Partition1%:\sources boot.wim /njh /njs %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler1
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Copying files to the exFAT or NTFS partition ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::
    
    robocopy "%SourcePath%sources " %Partition2%:\sources /mir /njh /njs /xf boot.wim %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler2
    robocopy %Partition1%:\ %Partition2%:\ /mov autounattend*.xml /njh /njs %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler2
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Creating an ei.cfg file. This will allow the user to select the edition of Windows to ::
    :: be installed even if the OEM BIOS has a signature for a specific edition of Windows.  ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if NOT exist %Partition2%:\sources\ei.cfg (
    echo [CHANNEL] > %Partition2%:\sources\ei.cfg
    echo Retail >> %Partition2%:\sources\ei.cfg
    )
    
    goto DoneCopying
    
    :DualArchitecture
    
    ::::::::::::::::::::::::::::::::::::::::::
    :: Copying files to the FAT32 partition ::
    ::::::::::::::::::::::::::::::::::::::::::
    
    robocopy "%SourcePath% " %Partition1%:\ /mir /xd sources x64 x86 "system volume information" $recycle.bin /njh /njs %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler1
    robocopy "%SourcePath%x64\sources " %Partition1%:\x64\sources boot.wim /njh /njs %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler1
    robocopy "%SourcePath%x86\sources " %Partition1%:\x86\sources boot.wim /njh /njs %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler1
    
    ::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Copying files to the exFAT or NTFS partition ::
    ::::::::::::::::::::::::::::::::::::::::::::::::::
    
    robocopy "%SourcePath%x64\sources " %Partition2%:\x64\sources /mir /njh /njs /xf boot.wim /njh /njs %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler2
    robocopy "%SourcePath%x86\sources " %Partition2%:\x86\sources /mir /njh /njs /xf boot.wim /njh /njs %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler2
    robocopy %Partition1%:\ %Partition2%:\ /mov autounattend*.xml /njh /njs %flag%
    if %ERRORLEVEL% gtr 3 goto ErrorHandler2
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Creating an ei.cfg file. This will allow the user to select the edition of Windows to ::
    :: be installed even if the OEM BIOS has a signature for a specific edition of Windows.  ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    if NOT exist %Partition2%:\x64\sources\ei.cfg (
    echo [CHANNEL] > %Partition2%:\x64\sources\ei.cfg
    echo Retail >> %Partition2%:\x64\sources\ei.cfg
    )
    
    if NOT exist %Partition2%:\x86\sources\ei.cfg (
    echo [CHANNEL] > %Partition2%:\x86\sources\ei.cfg
    echo Retail >> %Partition2%:\x86\sources\ei.cfg
    )
    
    :DoneCopying
    
    :::::::::::::::::::::::::::::
    :: Dismount the disk image ::
    :::::::::::::::::::::::::::::
    
    IF %AutoDismount%==N goto DismountDone
    
    :::::::::::::::::::::::::::::::::::::::
    :: Strip the backslash from the path ::
    :::::::::::::::::::::::::::::::::::::::
    
    IF "!SourcePath:~-1!"=="\" SET SourcePath=!SourcePath:~,-1!
    
    ::::::::::::::::::::::::
    :: Dismount the image ::
    ::::::::::::::::::::::::
    
    powershell.exe -command "Dismount-DiskImage -DevicePath \\.\%SourcePath%" > NUL
    
    :DismountDone
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: Inform the user that we are done. Also, as a precaution, check to see if an ::
    :: unattended setup answer file is present and warn the user if it is.         ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    cls
    echo All operations have been completed.
    echo.
    
    if exist %Partition2%:\autounattend.xml (
    echo ^^!CAUTION^^! An unattended setup file ^(autounattend.xml^) is present on the 2nd partition.
    echo As a result, if you boot from this disk, an unattended installation will begin. This has
    echo the potential to wipe out the contents of disks attached to your system without warning.
    echo.
    echo It might be a wise idea to carefully label the bootable media to reflect this situation.
    echo As an alternative, consider temporarily renaming the autounattend.xml to something else.
    echo.
    )
    pause
    
    :END
    
    exit
    
    
    :::::::::::::::
    :: FUNCTIONS ::
    :::::::::::::::
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :: The following is a function that can be called to convert ::
    :: the contents of a variable to uppercase characters.       ::
    ::                                                           ::
    :: To use this function, call this function and pass it the  ::
    :: name of the variable to convert. In the example below we  ::
    :: are passing "str" as the variable name.                   ::
    ::                                                           ::
    :: Example: call ::TOUPPERCASE str                           ::
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    
    :TOUPPERCASE
    if not defined %~1 exit /b
    for %%a in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R" "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z" "ä=Ä" "ö=Ö" "ü=Ü") do (
    call set %~1=%%%~1:%%~a%%
    )
    goto :eof
    
    
    :::::::::::::::::::::::::::::
    :: Error Handling Routines ::
    :::::::::::::::::::::::::::::
    
    :ErrorHandler1
    
    cls
    echo There was an error copying files to partition #1. Please verify that partition #1 has sufficient space available.
    echo Please correct the situation and run the script again. If you are changing the partition sizes, then you will
    echo need to use the WIPE operation to create new partitions with the newly specified sizes.
    echo.
    pause
    goto END
    
    :ErrorHandler2
    
    cls
    echo There was an error copying files to partition #2. Please verify that partition #2 has sufficient space available.
    echo Please correct the situation and run the script again. If you are changing the partition sizes, then you will
    echo need to use the WIPE operation to create new partitions with the newly specified sizes.
    echo.
    pause
    goto END
    Last edited by hsehestedt; 15 Jun 2023 at 16:06.
      My Computers


  7. Posts : 130
    Windows 10 Pro
    Thread Starter
       #7

    I am building a windows install disk.
    1 partition will be a bootable windows install (boot) (x)
    1 partition will be the sources drive (y)
    Non-bootable drive
    1 partition will be the apps/driver drive
    Non-bootable (z)
    That will be the layout of the usb flash drive.
    John
      My Computer


  8. Posts : 4,158
    Windows 11 Pro, 22H2
       #8

    RBCC said:
    I am building a windows install disk.
    1 partition will be a bootable windows install (boot) (x)
    1 partition will be the sources drive (y)
    Non-bootable drive
    1 partition will be the apps/driver drive
    Non-bootable (z)
    That will be the layout of the usb flash drive.
    John
    That's perfect, John. My batch file will do exactly that for you.

    NOTE: Over the past hour or so I made a few refinements. I'm going to post the updated version now. If you already grabbed the batch file, just wait a minute or two until you see a note just before the batch file that says it was updated.
      My Computers


  9. Posts : 4,158
    Windows 11 Pro, 22H2
       #9

    John, if you prefer not to use a batch file, here is a step-by-step procedure. It includes instructions for creating an additional partition(s) as you wish to do. Personally, I think the batch file would be easier, but this shows you what I'm doing in a step-by-step fashion.

    ------------
    Last update June 15, 2023

    Here is a procedure for creating a bootable Windows installation flash drive using no third-party tools, batch files, or anything other than running a few commands and copying some files.

    There are some circumstances, such as when a flash drive was configured for GPT, where the media creation tool may not yield a working flash drive. I like this procedure because I have NEVER seen this not work. You will be able to boot it on any system whether that system is BIOS based or UEFI based. In addition, there is no issue with having files that are greater than 4GB in size. I just keep this procedure handy in case I have any difficulties with any other method of creating the boot disk.

    Here is the procedure:

    1) Begin by having your Windows ISO image available. Double-click that file. That should "mount" the ISO image. This means that the ISO image is opened and assigned a drive letter, much like inserting a DVD in a drive. Take note of the drive letter that File Explorer shows for the mounted image.

    2) Plug in your flash drive if it is not already plugged in.

    3) Press WinLogoKey + R, type in "diskpart" (without the quotes), press <ENTER>.

    4) From the DISKPART> prompt, run this command:

    list disk

    5) From the size of the disks, try to determine which disk your thumb drive is and note the drive number. If that is not enough information, run these commands to get more detail on any disk. In this example, I want more info on disk 4:

    select disk 4
    detail disk

    Repeat the above two commands for any other drives for which you want more detailed information.

    Here is some sample output:

    DISKPART> list disk

    Disk ### Status Size Free Dyn Gpt
    -------- ------------- ------- ------- --- ---
    Disk 0 Online 476 GB 0 B *
    Disk 1 Online 3726 GB 0 B *
    Disk 2 Online 465 GB 1024 KB *
    Disk 3 Online 7452 GB 0 B *
    Disk 4 Online 238 GB 0 B

    DISKPART> select disk 4

    Disk 4 is now the selected disk.

    DISKPART> detail disk

    SanDisk Extreme Pro USB Device
    Disk ID: DC727760
    Type : USB
    Status : Online
    Path : 0
    Target : 0
    LUN ID : 0
    Location Path : UNAVAILABLE
    Current Read-only State : No
    Read-only : No
    Boot Disk : No
    Pagefile Disk : No
    Hibernation File Disk : No
    Crashdump Disk : No
    Clustered Disk : No

    Volume ### Ltr Label Fs Type Size Status Info
    ---------- --- ----------- ----- ---------- ------- --------- --------
    Volume 7 Z My Software NTFS Removable 238 GB Healthy
    C:\MountPoints\My Software\

    6) When you determine the correct disk, run the commands below while you are still in diskpart. In this example, I have determined that disk 4 is my flash drive. Be sure to select the correct disk number because everything on that disk will be erased!

    NOTE: It's possible that after you run the "clean" command below you may get an error. If that happens, simply run "clean" again. It should succeed the second time.

    select disk 4
    clean
    convert mbr
    create partition primary size=1000
    active
    format fs=fat32 quick label="VOL1"
    assign
    create partition primary < See NOTE #2 below
    format fs=ntfs quick label="VOL2"
    assign
    exit

    NOTE #1: The assign commands will assign the next available drive letter. If you want to assign a specific drives letter, for example E:, use the command "assign letter=E" rather than just "assign" by itself. Please also note that we are assigning the label "VOL1" to the first partition, and "VOL2" to the second partition. The only reason we are doing this is to make these partitions easy to identify when you look at them in File Explorer. You can use any label you like. Just be aware that you are limited to 11 characters for FAT32 (the first partition) and 32 characters for NTFS (the second partition).

    NOTE #2: The command shown will create the second partition with a size that will occupy all remaining space on the drive. If you want to create an additional partition(s) after this partition, you can specify a specific size here instead. Simply replace the command shown with this:

    create partition primary size=8192

    This will create the partition with a size of 8GB (8 x 1024 MB).

    You can then create addition partitions after you have completed this procedure or you can do it now while still in diskpart. If you want to do it now, simply run the three lines just before the "exit" again to create an additional partition, format it, and assign it a drive letter. Once again, if you want to use all space, use the "create partition primary" command. If you want to specify a size, use the "create partition primary size=xxxx" command.

    END OF NOTE 2

    In the next step, we will copy files from the source to the FAT32 and NTFS partitions on the thumb drive. To be clear, all the files and folders that you are being asked to copy come from your ISO image that you mounted in step 1. You are copying them to either the FAT32 partition (the one labeled "VOL1") or to the NTFS partition (the one labeled "VOL2") on your flash drive.

    7) Follow these steps to copy files to your thumb drive:

    ⦁ Copy all files and folders EXCEPT the \sources folder to the FAT32 partition.

    ⦁ Create a folder called sources on both the FAT32 partition AND the NTFS partition.

    ⦁ Copy the file \sources\boot.wim to the FAT32 partition \sources folder.

    ⦁ Copy all files and folders from the \sources folder EXCEPT boot.wim to the \sources folder on the NTFS partition.

    At this point, you should have a bootable thumb drive that can be booted from both BIOS and UEFI based systems.

    9) To finish, in File Explorer, right click the drive letter for the ISO image that you mounted in step 1 and choose "Eject". This will unmount the image, much like ejecting a DVD from its drive.

    10) OPTIONAL STEP (but recommended): If you purchase a system that shipped with Windows, the BIOS will usually contain a signature that indicates what edition of Windows that system shipped with. During Windows setup, if setup sees such a signature, it will install that same edition of Windows without asking you what edition to install even if your Windows install media has multiple editions of Windows. This makes one less decision for the user to make during installation, especially since many users may not even know what edition of Windows was originally installed on the system. However, let's say that your system shipped with Home edition but you later upgraded to Pro. In that case you may want to be able to choose to install the Pro edition rather than just have Windows choose the edition automatically. To do this, you can create a simple text file with two lines and drop that file into the \sources folder on the NTFS partition. Personally, I like to always create this file as it allows for greater flexibility since you will then always have a choice of what Windows edition to install.

    To create the file, open Notepad and type in the following two lines of text:

    [Channel]
    Retail

    Save the file and name it "ei.cfg". Make certain that it does NOT have a .txt file extension.

    Finally, simply drop that file into the \sources folder on the NTFS partition.

    PLEASE NOTE: When booting the media that you have created, on some UEFI based systems, you may be presented with an option to boot either the FAT32 or the NTFS partition. Choose the FAT32 partition. The boot menu may not tell you which partition is FAT32 and which is NTFS. The FAT32 partition will typically be the first option for that drive in the menu.
      My Computers


  10. Posts : 6,386
    Windows 11 Pro - Windows 7 HP - Lubuntu
       #10

    Excellent job @hsehestedt, although I would build the USB Win 10 22h2 installation drive using MCT
    Once created, I would shrink the Fat32 partition and create a new NTFS partition (Z) for apps/drivers.
      My Computers


 

  Related Discussions
Our Sites
Site Links
About Us
Windows 10 Forums is an independent web site and has not been authorized, sponsored, or otherwise approved by Microsoft Corporation. "Windows 10" and related materials are trademarks of Microsoft Corp.

© Designer Media Ltd
All times are GMT -5. The time now is 15:05.
Find Us




Windows 10 Forums