Installation and Upgrade WinPE - Create a Custom Windows Install USB


Win11USB Banner.png

As you all (should) already know, Windows Setup's install.wim file is growing with each new feature upgrade. It's coming close and soon going over the 4 GB size limit of a FAT32 formatted install media. Today, as I write this, (22-FEB-2022), downloading WIM-based most current public release install media as told here in Shawn Brink's tutorial, the install.wim file is 4.5 GB (UK English Windows 11).

There’s nothing in the UEFI specifications that prevents booting a computer from an NTFS formatted USB flash drive. In fact, this so-called limitation is entirely artificial, caused by the single fact that manufacturer has not included correct drivers in UEFI. Luckily, most modern computers can boot from a single-partition NTFS formatted USB flash drive, and install Windows 11 from a single partition USB media containing WIM image larger than 4 GB (maximum file size on FAT32 media).

But, what to do if the WIM file is over 4 GB, and your computer cannot boot from an NTFS formatted media?

This tutorial will show how to create a USB flash drive containing a FAT32 formatted WinPE partition, and a bigger NTFS formatted Windows Setup partition. When computer is booted from this USB flash drive, the WinPE partition takes care of boot, then runs Windows Setup from bigger setup partition on same USB.

The whole process takes 10 to 20 minutes, but only needs to be done once. In the future, the Windows Setup files on USB can be replaced with newer version of Windows 11.





Contents

Use links to jump to any part, browser back button to return to this table



Part One:Create WinPE
Part Two:Edit WinPE boot.wim
Part Three:Make WinPE ISO
Part Four:Partition USB flash drive
Part Five:Create bootable USB install media

Please notice: I have prepared a custom WinPE ISO image for you. You can download it from my OneDrive: WinPEx64.iso. File size is 474 MB.

Parts One, Two and Three in this tutorial will show how I edited and customized this WinPE image, and are intended to those users who want to learn how to do it by themselves.

Short: if you want to make this easy, download the provided WinPE ISO, and start from Part Four, and you are done in three minutes.




Part One

Create WinPE


1.1 Download and install both Windows 11 ADK (Assessment and Deployment Kit), and Windows PE add-on for the ADK, installing ADK first:

Download ADK.jpg

(Click screenshot thumbnails to open images enlarged.)

1.2 When installing ADK, for purpose of this tutorial, you will only need the Deployment Tools module. Unselecting everything else, download size is less than 100 MB:

ADK Install.jpg


1.3 When both ADK and WinPE add-on have been installed, open an elevated ADK Deployment and Imaging Tools Environment, a special mode of Command Prompt. You will find it in Start > All Apps > W > Windows Kits:

Run Tool.jpg


1.4 The prompt is quite long. Shorten it by jumping to root of the drive where ADK was installed with command cd \ (#1 in next screenshot)

1.5 Create 64-bit WinPE files with following command (#2 in next screenshot), where folder D:\WPEx64 is the folder where WinPE files will be created. Folder will be created automatically, it does not need to exist:

copype amd64 D:\WPEx64

Create PE Folder.jpg


For 32-bit WinPE, the command is as follows:

copype x86 D:\WPEx86


Part Two

Edit WinPE boot.wim


2.1 Depending on which bit architecture you selected, either folder D:\WPEx86 or D:\WPEx64 now contains all files and folders to create a WinPE ISO.

2.2 To edit it, we must mount WinPE boot.wim file for offline servicing. First, create a mount point folder. In this example, I made a folder C:\Mount. Open an elevated PowerShell, and enter following command to mount boot.wim:

Mount-WindowsImage -ImagePath D:\WPEx64\Media\Sources\boot.wim -Index 1 -Path C:\Mount

Change -ImagePath folder WPEx64 to WPEx32 if working with 32-bit WinPE.

2.3 Folder C:\Mount now contains WinPE image, and we can edit it. First thing I made when editing the provided custom WinPE image, I added PowerShell support. By default, WinPE does not support PowerShell.

To enable PowerShell in WinPE, copy and paste the following commands to elevated PowerShell:. Notice that you can copy all commands at once, and paste them all to elevated PowerShell, which will then run them one by one:

Code:
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-WMI.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-WMI_en-us.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-NetFX.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-NetFX_en-us.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-Scripting.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-Scripting_en-us.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-PowerShell.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-PowerShell_en-us.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-StorageWMI.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-StorageWMI_en-us.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-DismCmdlets.cab"
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\en-us\WinPE-DismCmdlets_en-us.cab"

The above commands will add PowerShell to a 64-bit WinPE. If you are creating a 32-bit WinPE, change the folder amd64 at the end of long path, near end of each command to x86. An example using the first of above listed commands:

64-bit WinPE:

Rich (BB code):
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-WMI.cab"

32-bit WinPE:

Rich (BB code):
Dism /Add-Package /Image:"C:\Mount" /PackagePath:"C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\WinPE_OCs\WinPE-WMI.cab"

2.4 This custom WinPE requires two scripts, a PowerShell script to find out drive letter of the NTFS partition on USB containing setup files, and then run Windows Setup, and a batch file to run that PS script.

Opening mount point folder C:\Mount, I created a folder Scripts on its root to store these two scripts:

Scripts folder created.jpg


2.5 First the small PS script. To save to mount point folder requires elevated rights, so we need to open Notepad elevated (run as administrator). Copy and paste the following code to it:

Powershell:
$SetupVolume = (Get-Volume -FileSystemLabel Setup).DriveLetter
$SetupFile = $SetupVolume + ':\setup.exe'
cmd /c $SetupFile

First line will search the USB for volume (partition) labelled Setup, and set its drive letter in variable $SetupVolume. Second line then creates variable $SetupFile, adding the important :\setup.exe to drive letter found in first line. For instance, if $SetupVolume is F, $SetupFile is F:\setup.exe.

Last line then executes command setup.exe from bigger NTFS partition Setup, which starts Windows Setup.

Save the file in folder C:\Mount\Scripts as SetupW10.ps1. In Save As dialog, remember to select Save As Type as All files:

Save PS Script.jpg


2.6 Next, short batch file. Copy and paste following code to an elevated Notepad:

Code:
@echo off
rem
rem Run PowerShell script to start Windows Setup
rem
cls
echo.
echo Starting windows Setup...
powershell -ExecutionPolicy bypass -file "X:\Scripts\SetupW11.ps1"

Only important line in this batch file is the last one. It executes the PS script made in step 2.5.

Save it to folder C:\Mount\Scripts as WinSetup.cmd. Again, as with the PS script, in Save As dialog, remember to select Save As Type as All files.

2.7 Last but not least, we need to edit file C:\Mount\Windows\System32\startnet.cmd. Startnet.cmd functions exactly like autoexec.bat did in Windows XP and older Windows versions, running every command in it automatically when WinPE boots.

By default, startnet.cmd only contains one command, wpeinit, which enables WinPE networking capabilities. We add two other commands to it.

Open startnet.cmd in an elevated Notepad. Copy and paste following code to it:

Code:
wpeinit
powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
X:\Scripts\WinSetup.cmd

The first line is the default command to initialize networking. In second line, we set a High Performance power plan to speed up Windows installation. In last line, we execute the batch file created in step 2.6.

When computer is booted from WinPE media, the contents of WinPE will be copied to RAM disk X. This is why we can use the path X:\Scripts on last command line, there being no need to find out the drive letter for volume containing the Scripts folder.

2.8 In an elevated PowerShell, enter following command to save changes to WinPE:

Dismount-WindowsImage -Path C:\Mount -Save


Part Three

Make WinPE ISO


3.1 Open an elevated ADK Deployment and Imaging Tools Environment as told in step 1.3.

3.2 Enter following command to create WinPE ISO:

MakeWinPEMedia /ISO D:\WPEx64 F:\WinPEx64.iso

Change path D:\WPEx64 to D:\WPEx86 if creating a 32-bit WinPE ISO. Path F:\WinPEx64.iso is the path and name of the ISO file that will be created.


Part Four

Partition USB flash drive


4.1 Plug in an at least 8 GB USB lash drive. Open an elevated PowerShell, start Windows Disk Partitioning utility with command DISKPART.

Enter command LIST DISK to show all attached disks, find out the disk ID for your USB Flash Drive. In my case now, the USB is DISK 3:

Diskpart.jpg


Be careful, absolutely sure that you find out correct Disk ID! In following step, the selected disk will be wiped clean, and new partitions will be created. Selecting wrong disk may cause Windows or data disks being formatted, all data lost.


4.2 Still in DISKPART, run following commands one by one. In first command, replace X (disk ID) with actual Disk ID for your USB flash drive:

select disk X
clean
create partition primary size=1024
format quick fs=fat32 label="Boot"
assign
create partition primary
format quick fs=ntfs label="Setup"
assign

4.3 Quit DISKPART with command EXIT. Your USB flash drive is now correctly partitioned, containing a 1 GB partition Boot, and partition Setup which occupies the rest of the USB:

USB Boot and Setup partitions.jpg





Part Five

Create bootable USB install media


5.1 Mount the WinPE ISO image created in Step 3.2 as a virtual CD / DVD drive (right click, select Mount). Copy its contents, all files and folders, to partition Boot on USB.

5.2 Mount a Windows 11 ISO image as a virtual CD / DVD drive (right click, select Mount). Copy its contents, all files and folders, to partition Setup on USB.

That's it! You have now a bootable USB flash drive to install Windows, even if the install.wim or install.esd file is bigger than FAT32 size limit 4 GB. In the future, when you need install media for a new Windows version, simply format the Setup partition on USB, and copy contents of new ISO to it.

Kari
 

Attachments

  • WIM Size.jpg
    WIM Size.jpg
    24.6 KB · Views: 204
Last edited by a moderator:
Update
Hello everyone,
Use this link to download the latest version of wim tools by @hsehestedt
Option 4 bypasses system requirements of installation of Windows 11 v24H2 iso downloaded from Microsoft official website(iso with multi editions having install.wim) for clean install as well as upgradation on unsupported hardware configuration.
Thanks.
 
Last edited:

My Computer

System One

  • OS
    Window 11 v24H2 Build 26100.2033
    Computer type
    PC/Desktop
    Manufacturer/Model
    ASSEMMBLED
    CPU
    Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz 3.10 GHz
    Motherboard
    ZEBRONICS
    Memory
    4.00 GB (3.89 GB usable)
    Graphics Card(s)
    Onboard
    Sound Card
    Onboard
    Monitor(s) Displays
    LG
    Screen Resolution
    1366x768
    Hard Drives
    Toshiba HDD 1 TB
    Keyboard
    Mechanical
    Mouse
    Mechanical
    Internet Speed
    700 kb/s
    Browser
    Microsoft EDGE, CHROME
    Antivirus
    Microsoft Defender
Just a heads up for anyone looking at this tutorial, kari's link to his onedrive for the iso is not working.

If anyone has a copy perhaps brink can link it.
 

My Computers

System One System Two

  • OS
    Windows 11 Pro
    Computer type
    PC/Desktop
    Manufacturer/Model
    Custom Built
    CPU
    Ryzen 7 5700 X3D
    Motherboard
    MSI MPG B550 GAMING PLUS
    Memory
    64 GB DDR4 3600mhz Gskill Ripjaws V
    Graphics Card(s)
    RTX 4070 Super , 12GB VRAM Asus EVO Overclock
    Monitor(s) Displays
    Gigabyte M27Q (rev. 2.0) 2560 x 1440 @ 170hz HDR
    Hard Drives
    2TB Samsung nvme ssd
    2TB XPG nvme ssd
    PSU
    CORSAIR RMx SHIFT Series™ RM750x 80 PLUS Gold Fully Modular ATX Power Supply
    Case
    CORSAIR 3500X ARGB Mid-Tower ATX PC Case – Black
    Cooling
    ID-COOLING FROSTFLOW X 240 CPU Water Cooler
    Internet Speed
    900mbps DOWN, 100mbps UP
  • Operating System
    Chrome OS
    Computer type
    Laptop
    Manufacturer/Model
    HP Chromebook
    CPU
    Intel Pentium Quad Core
    Memory
    4GB LPDDR4
    Monitor(s) Displays
    14 Inch HD SVA anti glare micro edge display
    Hard Drives
    64 GB emmc
Just a heads up for anyone looking at this tutorial, kari's link to his onedrive for the iso is not working.

If anyone has a copy perhaps brink can link it.

Interesting. I'm not sure why Kari did it the way that he did, I'm sure that there must be a very good reason and I'm sure that we could modify his procedure to make it work if there are any difficulties now, but I use a different, easier procedure with no need for the Windows ADK or Windows PE.

NOTE: I had to modify the procedure that I use to get it to work with Win 11 24H2 and I suspect that if we made the same change to Kari's procedure it too would work, but for now I will simply post my procedure below because I know for sure that it works. Also, I should point out that in post #161 of this thread, Ramesh posted a link to my WIM Tools utility. One of the features is that it automates the below procedure.

Detailed Procedure

NOTE: I'm putting this procedure in a code block because the formatting looks like rubbish here, but is fine in the code block without me having to make extensive formatting changes.

Code:
1) Run diskpart.

2) From the diskpart> prompt, run this command:

list disk

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

select disk 4
detail disk

4) When you determine the correct disk, run these commands. I am assuming disk 5 in the following example:

select disk 5
clean (if you get an error running this command, run it again)
convert mbr
create partition primary size=1024
active
format fs=fat32 quick
assign
create partition primary
format fs=ntfs quick
assign
exit

NOTE: The assign commands will assign the next available drive letter. If you want to assign specific drives letters,
for example E:, use this command:

assign letter=E

5) We will now copy files from the source to the two partitions on the thumb drive. To be clear, all the files and
folders that you are being asked to copy come from your source folder such as a folder on your hard disk that
contains all the Windows files, or from a mounted Windows ISO image.

Please note that this step 5 is optional, but I recommend it. See the explanation below (Notes about ei.cfg).

Notes about ei.cfg:

Let's say that you have a computer that shipped with Windows 11 Home, but you upgraded to Pro. You may find
that when you try to perform a clean install, Windows simply starts installing Home and doesn't even show you
the menu from which you can select other editions. By placing this file in the sources folder, we prevent that from
happening. This happens because Windows setup reads a signature in the BIOS that tells setup which edition of
Windows the system was shipped with. This allows Windows to install the same edition of Windows without the
end user needing to know what was originally on the system. Adding this file simply bypasses that and makes
Windows give you a choice of what edition to install.

Note that when doing an unattended install, this file is not needed because the autounattend.xml specifies the
edition of Windows to install, but you can leave the ei.cfg in place as it won't hurt anything. I always include this file
just for the sake of consistency.

Start by checking to see if your original source has a file called ei.cfg in the \sources folder. If that file is already
present, skip to step 6 now.

Create a text file called ei.cfg that we will use soon. Place the following 2 lines into that file and save it:

[Channel]
Retail
 
6) Follow these steps to copy files to your thumb drive:

• Copy all files and folders from your original source media EXCEPT the \sources folder to the FAT32 partition.
This is the first, smaller partition.

• If you are planning to use an autounattend.xml answer file, place it in the root of the first (FAT32) partition.
NOTE: By far the majority of people will NOT be doing this.

• Create a folder called sources on the FAT32 partition.

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

• Create a folder called sources on the NTFS partition. This is the second, larger partition.

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

• If you created an ei.cfg file, copy it to the \sources folder of the NTFS partition.

• Copy the folders "boot", "efi", and "support" from the source to the NTFS partition. Note that these three folders
will now exist on both the first and second partitions. These are small folders, so the duplication of data is very minor.

NOTE: The last bullet above becomes necessary with the Windows 11 24H2 Windows Preview release ISO image, first
noticed in build 26100.560. It was not needed with Windows 11 23H2 or earlier.

At this point, you should have a bootable thumb drive.

NOTE: When booting you may be presented with an option to boot either the FAT32 or the NTFS partition. Choose the
FAT32 partition. This is usually the first boot option if that drive is listed twice. If it is not clear which one the FAT32 partition
is, simply try either. If it doesn't work, reboot and try the other.
 
 

My Computers

System One System Two

  • OS
    Win11 Pro 24H2
    Computer type
    PC/Desktop
    Manufacturer/Model
    Self-built
    CPU
    Intel i7 11700K
    Motherboard
    ASUS Prime Z590-A MB
    Memory
    64GB (Waiting for warranty replacement of another 64GB for 128GB total)
    Graphics Card(s)
    No GPU - Built-in Intel Graphics
    Sound Card
    Integrated
    Monitor(s) Displays
    HP Envy 32
    Screen Resolution
    2560 x 1440
    Hard Drives
    1 x 1TB NVMe SSD
    1 x 2TB NVMe SSD
    1 x 4TB NVMe SSD
    3 x 512GB 2.5" SSD
    1 x 4TB 2.5" SSD
    5 x 8TB Seagate Barracuda HDD
    PSU
    Corsair HX850i
    Case
    Corsair iCUE RGB 5000X mid tower case
    Cooling
    Noctua NF-S12A chromax.black.swap case fans (Qty. 7) & Home Computer Specifications, Configuration, and Usage Notes General Specifications ASUS Prime Z590-A motherboard, serial number M1M0KC222467ARP Intel Core i7-11700K CPU (11th Gen Rocket Lake / LGA 1200 Socket) 128GB Crucial Ballistix RGB DDR4 3200 MHz DRAM (4 x 32GB) Corsair iCUE RGB 5000X mid tower case Noctua NH-D15 chromax.black CPU cooler Noctua NF-S12A chromax.black.swap case fans (Qty. 7) & Corsair LL-120 RGB Fans (Qty. 3)
    Keyboard
    Corsair K70 Max RGB Magnetic Keyboard
    Mouse
    Logitech MX Master 3
    Internet Speed
    1Gb Up / 1 Gb Down
    Browser
    Edge
    Antivirus
    Windows Defender
    Other Info
    The five 8TB drives and three 512GB SSDs are part of a DrivePool using StableBit DrivePool software. The three SSDs are devoted purely to caching for the 8TB drives. All of the important data is stored in triplicate so that I can withstand simultaneous failure of 2 disks.

    Networking: 2.5Gbps Ethernet and WiFi 6e
  • Operating System
    Win11 Pro 23H2
    Computer type
    Laptop
    Manufacturer/Model
    Lenovo ThinkBook 13x Gen 2
    CPU
    Intel i7-1255U
    Memory
    16 GB
    Graphics card(s)
    Intel Iris Xe Graphics
    Sound Card
    Realtek® ALC3306-CG codec
    Monitor(s) Displays
    13.3-inch IPS Display
    Screen Resolution
    WQXGA (2560 x 1600)
    Hard Drives
    2 TB 4 x 4 NVMe SSD
    PSU
    USB-C / Thunderbolt 4 Power / Charging
    Mouse
    Buttonless Glass Precision Touchpad
    Keyboard
    Backlit, spill resistant keyboard
    Internet Speed
    1Gb Up / 1Gb Down
    Browser
    Edge
    Antivirus
    Windows Defender
    Other Info
    WiFi 6e / Bluetooth 5.1 / Facial Recognition / Fingerprint Sensor / ToF (Time of Flight) Human Presence Sensor
Follow-up...

Wow, I better get some caffeine in me. I completely forgot that I already have a batch file that does this. Below is a copy of that batch file.

To use this, read the instructions at the top and set the user defined variables to the options you want as noted in the instructions.

This batch file has some additional features: It can leave space at the end of the disk so that you can create additional partitions if you wish. As an example, I create a Windows install disk that has another partition holding drivers for my systems so that after I install Windows I have all my drivers available on the same thumb drive.

In addition, the batch file can perform a "refresh". For example, say you created a disk using this batch file and you added another partition that has drivers, notes, and other data you don't want to loose. Now, a new version of Windows is released and you want to update your thumb drive so that it would install this new version. You can use the "refresh" option to update the two partitions used to install Windows while leaving any other partitions and data on the thumb drive intact.

Batch:
@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 January 17, 2025                                                                             ::
::                                                                                                           ::
:: Version 2.01.14                                                                                           ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: A quick note about storage size: Microsoft considers 1 KB to be 1024 bytes rather than 1000 bytes. However,  ::
:: storage vendors typically consider 1 KB to be 1000 bytes. In order to be completely technically correct, the ::
:: latest convention holds that 1 KB = 1000 bytes and 1 KiB = 1024 bytes, but Microsoft uses the term KB for    ::
:: for what should technically be a KiB. In the text below we are not getting caught up in these differences.   ::
:: If you see that Windows reports slightly different sizes than expected, this is the reason why. This will    ::
:: not make any difference to what we are doing here.                                                           ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 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        ::
::    (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    ::
::    2 TB in size. If you plan to use a disk larger than 2 TB 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=1024
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. This ensures  ::
:: consistency so that the source path always ends with a backslash. ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

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. ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

(echo select disk %DiskID%
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. Specifically,     ::
:: this will happen if a path ends with a backslash (\). Since the source path always ends with a backslash in this ::
:: project, we add that space after the source path even when modified just to be sure that the robocopy command    ::
:: will work.                                                                                                       ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

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 "%SourcePath%boot " %Partition2%:\boot /mir /njh /njs %flag%
if %ERRORLEVEL% gtr 3 goto ErrorHandler2
robocopy "%SourcePath%efi " %Partition2%:\efi /mir /njh /njs %flag%
if %ERRORLEVEL% gtr 3 goto ErrorHandler2
robocopy "%SourcePath%support " %Partition2%:\support /mir /njh /njs %flag%
if %ERRORLEVEL% gtr 3 goto ErrorHandler2
robocopy "%Partition1%:\ " "%Partition2%:\ " /mov autounattend*.xml /njh /njs %flag%
if %ERRORLEVEL% gtr 3 goto ErrorHandler2
pause

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 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 "%SourcePath%x64\boot " %Partition2%:\x64\boot /mir /njh /njs /njh /njs %flag%
if %ERRORLEVEL% gtr 3 goto ErrorHandler2
robocopy "%SourcePath%x86\boot " %Partition2%:\x86\boot /mir /njh /njs /njh /njs %flag%
if %ERRORLEVEL% gtr 3 goto ErrorHandler2
robocopy "%SourcePath%x64\efi " %Partition2%:\x64\efi /mir /njh /njs /njh /njs %flag%
if %ERRORLEVEL% gtr 3 goto ErrorHandler2
robocopy "%SourcePath%x86\efi " %Partition2%:\x86\efi /mir /njh /njs /njh /njs %flag%
if %ERRORLEVEL% gtr 3 goto ErrorHandler2
robocopy "%SourcePath%x64\support " %Partition2%:\x64\support /mir /njh /njs /njh /njs %flag%
if %ERRORLEVEL% gtr 3 goto ErrorHandler2
robocopy "%SourcePath%x86\support " %Partition2%:\x86\support /mir /njh /njs /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

cls
echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo :: Checking to see if this system has BlackLotus UEFI Bootkit Secure Boot mitigations ::
echo :: installed. If it does, we will use this to make your boot disk compatible with     ::
echo :: systems that have this update applied. Please note that we can only make this disk ::
echo :: compatible from systems that have this mitigation applied.                         ::
echo ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo.

:: Check to make sure that the first of two mitigations are applied to this system.
:: The first mitigation adds the "Windows UEFI CA 2023" certificate to the UEFI "Secure Boot Signature Database" (DB).
:: By adding this certificate to the DB, the device firmware will trust boot applications signed by this certificate.

for /f %%a in ('powershell "[System.Text.Encoding]::ASCII.GetString((Get-SecureBootUEFI db).bytes) -match 'Windows UEFI CA 2023'"') do set "PowerShellOutput=%%a"

if "%PowerShellOutput%"=="True" (
    goto CheckCondition2
) else (
    goto NotInstalled
)

:CheckCondition2

:: Check to make sure that the second of two mitigations are applied to this system.
:: The UEFI Forbidden List (DBX) is used to block untrusted UEFI modules from loading. The second mitigation updates the
:: DBX by adding the "Windows Production CA 2011" certificate to the DBX. This will cause all boot managers signed by
:: this certificate to no longer be trusted.

for /f %%a in ('powershell "[System.Text.Encoding]::ASCII.GetString((Get-SecureBootUEFI dbx).bytes) -match 'Microsoft Windows Production PCA 2011'"') do set "PowerShellOutput=%%a"

if "%PowerShellOutput%"=="True" (
    goto Condition2True
) else (
    goto NotInstalled
)

:Condition2True

:: We have verified that the mitigations for the BlackLotus UEFI Bootkit are installed on this system. We will now update
:: the boot media to ensure that it can be successfully booted on systems with this mitigation applied.

:: Make sure that the files on the destination disk are not read only

attrib %Partition1%:\*.* -r /s /d > NUL 2>&1

:: Update the boot media to ensure compatibility with the mitigations.

COPY /Y %Partition1%:\EFI\MICROSOFT\BOOT\BCD %Partition1%:\EFI\MICROSOFT\BOOT\BCD.BAK > NUL
bcdboot c:\windows /f UEFI /s %Partition1%: /bootex > NUL 2>&1
COPY /Y %Partition1%:\EFI\MICROSOFT\BOOT\BCD.BAK %Partition1%:\EFI\MICROSOFT\BOOT\BCD > NUL

echo This system has the mitigations installed so we were able to patch your boot disk.
echo.
pause
goto DoneWithMitigation

:NotInstalled

echo This system does NOT have the mitigations installed so we are NOT able to patch your boot disk.
echo It is possible that disk may not boot on systems with those mitigations applied.
echo.
echo Please note that at this time, this will not affect most users so you simply consider this to be
echo an informational message.
echo.
pause
goto DoneWithMitigation

:DoneWithMitigation


:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 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
 

My Computers

System One System Two

  • OS
    Win11 Pro 24H2
    Computer type
    PC/Desktop
    Manufacturer/Model
    Self-built
    CPU
    Intel i7 11700K
    Motherboard
    ASUS Prime Z590-A MB
    Memory
    64GB (Waiting for warranty replacement of another 64GB for 128GB total)
    Graphics Card(s)
    No GPU - Built-in Intel Graphics
    Sound Card
    Integrated
    Monitor(s) Displays
    HP Envy 32
    Screen Resolution
    2560 x 1440
    Hard Drives
    1 x 1TB NVMe SSD
    1 x 2TB NVMe SSD
    1 x 4TB NVMe SSD
    3 x 512GB 2.5" SSD
    1 x 4TB 2.5" SSD
    5 x 8TB Seagate Barracuda HDD
    PSU
    Corsair HX850i
    Case
    Corsair iCUE RGB 5000X mid tower case
    Cooling
    Noctua NF-S12A chromax.black.swap case fans (Qty. 7) & Home Computer Specifications, Configuration, and Usage Notes General Specifications ASUS Prime Z590-A motherboard, serial number M1M0KC222467ARP Intel Core i7-11700K CPU (11th Gen Rocket Lake / LGA 1200 Socket) 128GB Crucial Ballistix RGB DDR4 3200 MHz DRAM (4 x 32GB) Corsair iCUE RGB 5000X mid tower case Noctua NH-D15 chromax.black CPU cooler Noctua NF-S12A chromax.black.swap case fans (Qty. 7) & Corsair LL-120 RGB Fans (Qty. 3)
    Keyboard
    Corsair K70 Max RGB Magnetic Keyboard
    Mouse
    Logitech MX Master 3
    Internet Speed
    1Gb Up / 1 Gb Down
    Browser
    Edge
    Antivirus
    Windows Defender
    Other Info
    The five 8TB drives and three 512GB SSDs are part of a DrivePool using StableBit DrivePool software. The three SSDs are devoted purely to caching for the 8TB drives. All of the important data is stored in triplicate so that I can withstand simultaneous failure of 2 disks.

    Networking: 2.5Gbps Ethernet and WiFi 6e
  • Operating System
    Win11 Pro 23H2
    Computer type
    Laptop
    Manufacturer/Model
    Lenovo ThinkBook 13x Gen 2
    CPU
    Intel i7-1255U
    Memory
    16 GB
    Graphics card(s)
    Intel Iris Xe Graphics
    Sound Card
    Realtek® ALC3306-CG codec
    Monitor(s) Displays
    13.3-inch IPS Display
    Screen Resolution
    WQXGA (2560 x 1600)
    Hard Drives
    2 TB 4 x 4 NVMe SSD
    PSU
    USB-C / Thunderbolt 4 Power / Charging
    Mouse
    Buttonless Glass Precision Touchpad
    Keyboard
    Backlit, spill resistant keyboard
    Internet Speed
    1Gb Up / 1Gb Down
    Browser
    Edge
    Antivirus
    Windows Defender
    Other Info
    WiFi 6e / Bluetooth 5.1 / Facial Recognition / Fingerprint Sensor / ToF (Time of Flight) Human Presence Sensor
Thanks @hsehestedt 🙏
An excellent way to prepare bootable usb for Windows 11 v24H2 and also perfect for installation of Windows 11 v24H2 on unsupported hardware configuration (in my pc it required only 16402 MB free space for installation of Windows 11 v24H2 on any partition in internal disk). I have prepared the bootable usb by this batch file (by coping the whole code block and saving it as winpe.cmd in notepad with option file all types).
Thanks everyone and do try this batch file to prepare bootable usb of Windows 11 v24H2 with additional function of patching to mitigations applied systems in pc. No need to apply any bypass to install on an unsupported hardware configuration.
 

My Computer

System One

  • OS
    Window 11 v24H2 Build 26100.2033
    Computer type
    PC/Desktop
    Manufacturer/Model
    ASSEMMBLED
    CPU
    Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz 3.10 GHz
    Motherboard
    ZEBRONICS
    Memory
    4.00 GB (3.89 GB usable)
    Graphics Card(s)
    Onboard
    Sound Card
    Onboard
    Monitor(s) Displays
    LG
    Screen Resolution
    1366x768
    Hard Drives
    Toshiba HDD 1 TB
    Keyboard
    Mechanical
    Mouse
    Mechanical
    Internet Speed
    700 kb/s
    Browser
    Microsoft EDGE, CHROME
    Antivirus
    Microsoft Defender
Thanks @hsehestedt 🙏
An excellent way to prepare bootable usb for Windows 11 v24H2 and also perfect for installation of Windows 11 v24H2 on unsupported hardware configuration (in my pc it required only 16402 MB free space for installation of Windows 11 v24H2 on any partition in internal disk). I have prepared the bootable usb by this batch file (by coping the whole code block and saving it as winpe.cmd in notepad with option file all types).
Thanks everyone and do try this batch file to prepare bootable usb of Windows 11 v24H2 with additional function of patching to mitigations applied systems in pc. No need to apply any bypass to install on an unsupported hardware configuration.

Thanks, Ramesh :-)
 

My Computers

System One System Two

  • OS
    Win11 Pro 24H2
    Computer type
    PC/Desktop
    Manufacturer/Model
    Self-built
    CPU
    Intel i7 11700K
    Motherboard
    ASUS Prime Z590-A MB
    Memory
    64GB (Waiting for warranty replacement of another 64GB for 128GB total)
    Graphics Card(s)
    No GPU - Built-in Intel Graphics
    Sound Card
    Integrated
    Monitor(s) Displays
    HP Envy 32
    Screen Resolution
    2560 x 1440
    Hard Drives
    1 x 1TB NVMe SSD
    1 x 2TB NVMe SSD
    1 x 4TB NVMe SSD
    3 x 512GB 2.5" SSD
    1 x 4TB 2.5" SSD
    5 x 8TB Seagate Barracuda HDD
    PSU
    Corsair HX850i
    Case
    Corsair iCUE RGB 5000X mid tower case
    Cooling
    Noctua NF-S12A chromax.black.swap case fans (Qty. 7) & Home Computer Specifications, Configuration, and Usage Notes General Specifications ASUS Prime Z590-A motherboard, serial number M1M0KC222467ARP Intel Core i7-11700K CPU (11th Gen Rocket Lake / LGA 1200 Socket) 128GB Crucial Ballistix RGB DDR4 3200 MHz DRAM (4 x 32GB) Corsair iCUE RGB 5000X mid tower case Noctua NH-D15 chromax.black CPU cooler Noctua NF-S12A chromax.black.swap case fans (Qty. 7) & Corsair LL-120 RGB Fans (Qty. 3)
    Keyboard
    Corsair K70 Max RGB Magnetic Keyboard
    Mouse
    Logitech MX Master 3
    Internet Speed
    1Gb Up / 1 Gb Down
    Browser
    Edge
    Antivirus
    Windows Defender
    Other Info
    The five 8TB drives and three 512GB SSDs are part of a DrivePool using StableBit DrivePool software. The three SSDs are devoted purely to caching for the 8TB drives. All of the important data is stored in triplicate so that I can withstand simultaneous failure of 2 disks.

    Networking: 2.5Gbps Ethernet and WiFi 6e
  • Operating System
    Win11 Pro 23H2
    Computer type
    Laptop
    Manufacturer/Model
    Lenovo ThinkBook 13x Gen 2
    CPU
    Intel i7-1255U
    Memory
    16 GB
    Graphics card(s)
    Intel Iris Xe Graphics
    Sound Card
    Realtek® ALC3306-CG codec
    Monitor(s) Displays
    13.3-inch IPS Display
    Screen Resolution
    WQXGA (2560 x 1600)
    Hard Drives
    2 TB 4 x 4 NVMe SSD
    PSU
    USB-C / Thunderbolt 4 Power / Charging
    Mouse
    Buttonless Glass Precision Touchpad
    Keyboard
    Backlit, spill resistant keyboard
    Internet Speed
    1Gb Up / 1Gb Down
    Browser
    Edge
    Antivirus
    Windows Defender
    Other Info
    WiFi 6e / Bluetooth 5.1 / Facial Recognition / Fingerprint Sensor / ToF (Time of Flight) Human Presence Sensor
This is very useful Tutorial for everyone. We have important batch files by @garlin , @hsehestedt , @cereberus , and all VIP members in this tutorial. I hope this tutorial might be bookmarked/highlighted so that we would find/explore/read/refer this anytime we need.
Thanks to ElevenForum team.
 

My Computer

System One

  • OS
    Window 11 v24H2 Build 26100.2033
    Computer type
    PC/Desktop
    Manufacturer/Model
    ASSEMMBLED
    CPU
    Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz 3.10 GHz
    Motherboard
    ZEBRONICS
    Memory
    4.00 GB (3.89 GB usable)
    Graphics Card(s)
    Onboard
    Sound Card
    Onboard
    Monitor(s) Displays
    LG
    Screen Resolution
    1366x768
    Hard Drives
    Toshiba HDD 1 TB
    Keyboard
    Mechanical
    Mouse
    Mechanical
    Internet Speed
    700 kb/s
    Browser
    Microsoft EDGE, CHROME
    Antivirus
    Microsoft Defender
@Ramesh Sharma,

I just wanted to let you that I'll be releasing a new WIM Tools version later today (Monday), or if testing reveals any issues, tomorrow (Tuesday).

Got feedback on GitHub suggesting, among other things, that the routine for converting an Install.ESD into an Install.WIM should also support going the other direction - from WIM to ESD. I've implement that but also took it a step further: You no longer need to point it to an ISO image as the source, although you can still do that, but you can also convert a standalone Install.WIM into an install.ESD or an Install.ESD into an Install.WIM.

Since I've now opened the door to working with individual files, I also plan to update the related routine for getting Windows info from an ISO image so that you can get this info for standalone Install.WIM, Install.ESD, Boot.WIM, and WinRE.WIM files. Look for this to get implemented soon.
 

My Computers

System One System Two

  • OS
    Win11 Pro 24H2
    Computer type
    PC/Desktop
    Manufacturer/Model
    Self-built
    CPU
    Intel i7 11700K
    Motherboard
    ASUS Prime Z590-A MB
    Memory
    64GB (Waiting for warranty replacement of another 64GB for 128GB total)
    Graphics Card(s)
    No GPU - Built-in Intel Graphics
    Sound Card
    Integrated
    Monitor(s) Displays
    HP Envy 32
    Screen Resolution
    2560 x 1440
    Hard Drives
    1 x 1TB NVMe SSD
    1 x 2TB NVMe SSD
    1 x 4TB NVMe SSD
    3 x 512GB 2.5" SSD
    1 x 4TB 2.5" SSD
    5 x 8TB Seagate Barracuda HDD
    PSU
    Corsair HX850i
    Case
    Corsair iCUE RGB 5000X mid tower case
    Cooling
    Noctua NF-S12A chromax.black.swap case fans (Qty. 7) & Home Computer Specifications, Configuration, and Usage Notes General Specifications ASUS Prime Z590-A motherboard, serial number M1M0KC222467ARP Intel Core i7-11700K CPU (11th Gen Rocket Lake / LGA 1200 Socket) 128GB Crucial Ballistix RGB DDR4 3200 MHz DRAM (4 x 32GB) Corsair iCUE RGB 5000X mid tower case Noctua NH-D15 chromax.black CPU cooler Noctua NF-S12A chromax.black.swap case fans (Qty. 7) & Corsair LL-120 RGB Fans (Qty. 3)
    Keyboard
    Corsair K70 Max RGB Magnetic Keyboard
    Mouse
    Logitech MX Master 3
    Internet Speed
    1Gb Up / 1 Gb Down
    Browser
    Edge
    Antivirus
    Windows Defender
    Other Info
    The five 8TB drives and three 512GB SSDs are part of a DrivePool using StableBit DrivePool software. The three SSDs are devoted purely to caching for the 8TB drives. All of the important data is stored in triplicate so that I can withstand simultaneous failure of 2 disks.

    Networking: 2.5Gbps Ethernet and WiFi 6e
  • Operating System
    Win11 Pro 23H2
    Computer type
    Laptop
    Manufacturer/Model
    Lenovo ThinkBook 13x Gen 2
    CPU
    Intel i7-1255U
    Memory
    16 GB
    Graphics card(s)
    Intel Iris Xe Graphics
    Sound Card
    Realtek® ALC3306-CG codec
    Monitor(s) Displays
    13.3-inch IPS Display
    Screen Resolution
    WQXGA (2560 x 1600)
    Hard Drives
    2 TB 4 x 4 NVMe SSD
    PSU
    USB-C / Thunderbolt 4 Power / Charging
    Mouse
    Buttonless Glass Precision Touchpad
    Keyboard
    Backlit, spill resistant keyboard
    Internet Speed
    1Gb Up / 1Gb Down
    Browser
    Edge
    Antivirus
    Windows Defender
    Other Info
    WiFi 6e / Bluetooth 5.1 / Facial Recognition / Fingerprint Sensor / ToF (Time of Flight) Human Presence Sensor
Edit
First we have to use option 4 in wim tools by @hsehestedt as mentioned in post #161 and then winpe.cmd (anyname) as explained in post #164 to create bootable usb of Windows 11 v24H2 os build 26100.1742 having install.wim This bootable usb clean installs as well as in place upgrades on unsupported hardware configuration.
Presently media creation tool in Microsoft official website downloads Windows 11 v24H2 os build 26100.2033 having install.esd
Option 4 works on install.wim so use option 9 to convert install.esd to install .wim and then use option 4 to create bootable usb to install windows 11 v24H2 os build 26100.1742
Os build can be easily known by batch file CorrectVersion.bat by @garlin in post #149.
All these lines should have been added to lines in post #165.
I apologize.
Thanks.
 

My Computer

System One

  • OS
    Window 11 v24H2 Build 26100.2033
    Computer type
    PC/Desktop
    Manufacturer/Model
    ASSEMMBLED
    CPU
    Intel(R) Core(TM) i3-2100 CPU @ 3.10GHz 3.10 GHz
    Motherboard
    ZEBRONICS
    Memory
    4.00 GB (3.89 GB usable)
    Graphics Card(s)
    Onboard
    Sound Card
    Onboard
    Monitor(s) Displays
    LG
    Screen Resolution
    1366x768
    Hard Drives
    Toshiba HDD 1 TB
    Keyboard
    Mechanical
    Mouse
    Mechanical
    Internet Speed
    700 kb/s
    Browser
    Microsoft EDGE, CHROME
    Antivirus
    Microsoft Defender

Latest Support Threads

Back
Top Bottom