How to make a bootable Windows USB in linux

1. Format USB-key as fat32 filesystem

2. Copy contents (extracted) of windows.iso USB-key

3. Mount USB-key and open Terminal into USB-key

4. Make syslinux folder

mkdir syslinux

5. Copy syslinux-files

cp -ax /usr/lib/syslinux/modules/bios/*.c32 syslinux/

6. Install syslinux into USB-key (if sdb is USB-key)

sudo syslinux --directory /syslinux --install /dev/sdb1

7. Find USB-key´s ID

sudo sfdisk --disk-id /dev/sdb

8. Make syslinux.cfg file

nano syslinux/syslinux.cfg

… a contents

default menu.c32
prompt 0
menu title Multiboot USB
timeout 100

label Multiboot USB
menu label Multiboot USB
kernel /grub.exe

LABEL windows
MENU LABEL Windows
COM32 chain.c32
APPEND mbr:0xcf99c9ea

LABEL reboot
MENU LABEL Reboot
COM32 reboot.c32

LABEL poweroff
MENU LABEL Power Off
COM32 poweroff.c32

Use USB-key´s ID in the APPEND mbr:xxxx line

… save and quit

Ctrl o
Ctrl x

9. Install syslinux to the USB-key´s mbr

sudo dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sdb

10. Download, extract and copy grub4dos files grub.exe and menu.lst to the USB.

https://sourceforge.net/projects/grub4dos/

11. Edit menu.lst file as

# menu.lst produced by grub4dosconfig-v1.8.0
color white/green yellow/blue white/black green/black
#splashimage=/splash.xpm
timeout 30
default 0

color white/blue blue/yellow white/black yellow/black
#color white/blue black/cyan white/black cyan/black
timeout 30
default 0
fallback 1

title find and load Grub2 (not EFI)
find --set-root /boot/grub/i386-pc/core.img
kernel /boot/grub/i386-pc/core.img
boot

title find and load Grub2 older version (not EFI)
find --set-root /boot/grub/core.img
kernel /boot/grub/core.img
boot

title find and load NTLDR of Windows NT/2K/XP
fallback 1
find --set-root --ignore-floppies /ntldr
chainloader /ntldr
savedefault --wait=2

title find and load BOOTMGR of Windows
fallback 2
find --set-root --ignore-floppies /bootmgr
chainloader /bootmgr
savedefault --wait=2

title find and load IO.SYS of Windows 9x/Me
fallback 4
find --set-root /io.sys
chainloader /io.sys
savedefault --wait=2

title Windows NT/2000/XP hd1 p1
rootnoverify (hd0,0)
chainloader /ntldr

title Windows NT/2000/XP hd1 p2
rootnoverify (hd0,1)
chainloader /ntldr

title Windows NT/2000/XP hd1 p3
rootnoverify (hd0,2)
chainloader /ntldr

title Windows NT/2000/XP hd1 p4
rootnoverify (hd0,3)
chainloader /ntldr

title Windows NT/2000/XP hd2 p1
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,0)
chainloader /ntldr

title Windows NT/2000/XP hd2 p2
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,1)
chainloader /ntldr

title Windows NT/2000/XP hd2 p3
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,2)
chainloader /ntldr

title Windows NT/2000/XP hd2 p4
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,3)
chainloader /ntldr

title Windows Vista/2008/7 hd1 p1
rootnoverify (hd0,0)
chainloader /bootmgr

title Windows Vista/2008/7 hd1 p2
rootnoverify (hd0,1)
chainloader /bootmgr

title Windows Vista/2008/7 hd1 p3
rootnoverify (hd0,2)
chainloader /bootmgr

title Windows Vista/2008/7 hd1 p4
rootnoverify (hd0,3)
chainloader /bootmgr

title Windows Vista/2008/7 hd2 p1
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,0)
chainloader /bootmgr

title Windows Vista/2008/7 hd2 p2
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,1)
chainloader /bootmgr

title Windows Vista/2008/7 hd1 p3
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,2)
chainloader /bootmgr

title Windows Vista/2008/7 hd1 p4
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,3)
chainloader /bootmgr

title Windows 9x/Me hd1 p1
rootnoverify (hd0,0)
chainloader /io.sys

title Windows 9x/Me hd1 p2
rootnoverify (hd0,1)
chainloader /io.sys

title Windows 9x/Me hd1 p3
rootnoverify (hd0,2)
chainloader /io.sys

title Windows 9x/Me hd1 p4
rootnoverify (hd0,3)
chainloader /io.sys

title Windows 9x/Me hd2 p1
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,0)
chainloader /io.sys

title Windows 9x/Me hd2 p2
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,1)
chainloader /io.sys

title Windows 9x/Me hd2 p3
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,2)
chainloader /io.sys

title Windows 9x/Me hd2 p4
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
rootnoverify (hd0,3)
chainloader /io.sys

title Find Grub menu on HDD 1
errorcheck off
find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
errorcheck on
commandline
title Find Grub menu on HDD 2
map (hd1) (hd0)
map (hd0) (hd1)
map --hook
errorcheck off
find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
errorcheck on
commandline

title Find Grub2\nBoot up grub2 if installed
find --set-root --ignore-floppies --ignore-cd /boot/grub/i386-pc/core.img
kernel /boot/grub/i386-pc/core.img

title Restart System
reboot

title Shutdown System
halt