Hello.
I have USB 3.0 pendrive with installed grub2 bios. I have wimboot files from this site:
https://rmprepusb.co...-grub2grub4dos/
That is my function to boot Windows with wimboot:
function wimboot {
loopback loop $isoecho Using /sources/boot.wim...set installiso=$isosave_env installiso
linux16 /wimboot/wimbootinitrd16 \newc:bootmgr:(loop)/bootmgr \newc:winpeshl.ini:/wimboot/winpeshl.ini \newc:null.cfg:/wimboot/null.cfg \newc:startup.bat:/$folder/startup.bat \newc:boot.wim:(loop)/sources/boot.wim \newc:bcd:(loop)/boot/bcd \newc:boot.sdi:(loop)/boot/boot.sdidrivemap -s hd0 hd1boot}
And example entry to select in menu:
if cpuid -l; then
menuentry "Windows 8.1 2021 64bit" {
if [ "$grub_platform" = "pc" ]; thenset folder="W864"set iso="/Windows/$folder.iso"wimbootfi
if [ "$grub_platform" = "efi" ]; thenecho Nothing to dofi}
fi
My problem:
Windows 10 32-bit and 64-bit work correctly, but Windows 7 SP1 (both versions with USB3 drivers) and Windows 8.1 can't find startup.bat:
ERROR – could not find \W864\startup.bat on any drive!
This is W10 bat file (works):
@echo off
TITLE %~dpnx0 (WIMBOOT startup.bat)wpeinit.exeREM prevent wpeinit from running againren X:\windows\system32\wpeinit.exe wpeinit.exe.oldfor %%I in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%I:\W1064\startup.bat set USBDRIVE=%%I:IF "%USBDRIVE%"=="" (echo ERROR – could not find \W1064\startup.bat on any drive!@echo onfor %%I in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%I:\W1064\startup.bat set USBDRIVE=%%I:pausegoto :EOF)color 1fcls@echo FOUND USB DRIVE AT DRIVE %USBDRIVE%SET BIT=32if "%PROCESSOR_ARCHITECTURE%"=="AMD64" SET BIT=64FOR /L %%A IN (0,1,5000) DO ECHO NOTHING > nulcd /d %USBDRIVE%\set MYISO=/Windows/W1064.isoecho MYISO sets as %MYISO%echo Looking for X:\Windows\System32\null.cfg contents...for /f "tokens=1,2 delims==" %%a in ('find "installiso=" X:\Windows\System32\null.cfg') do set isopath=%%bREM change linux forward slash to Windows backslashset string1=%isopath:/=\%if exist "%USBDRIVE%%string1%" set MYISO=%string1%if not exist "%USBDRIVE%%MYISO%" if exist X:\Windows\System32\null.cfg type X:\Windows\System32\null.cfgif not exist "%USBDRIVE%%MYISO%" echo ERROR: Can’t find %USBDRIVE%%MYISO% && pause && goto :EOFif exist "%USBDRIVE%%MYISO%" echo Loading %USBDRIVE%%MYISO%...REM Load ISO using ImDiskTITLE LOAD WINDOWS ISO USING IMDISKcall \wimboot\imdisk\IMDISK_install.cmdcall \wimboot\imdisk\IMDISK_instiso.cmdREM Find mounted DVD driveset DVDDRIVE=FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\SOURCES\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\SOURCES\install.*)FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\SOURCES\x86\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\SOURCES\x86\install.*)FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\SOURCES\x64\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\SOURCES\x64\install.*)FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\x86\SOURCES\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\x86\SOURCES\install.*)FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\x64\SOURCES\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\x64\SOURCES\install.*):ENDSEARCHIF "%DVDDRIVE%"=="" echo WARNING: VIRTUAL DRIVE DRIVE NOT FOUND!IF "%DVDDRIVE%"=="" echo WARNING: install.* not found on any mounted volume.IF "%DVDDRIVE%"=="" pauseecho.IF NOT "%DVDDRIVE%"=="" echo ISO FILE MOUNTED AS %DVDDRIVE%ver | find " 10." && set WINVER=10ver | find " 6.2." && set WINVER=8ver | find " 6.3." && set WINVER=8ver | find " 6.1." && set WINVER=7echo.set R=set S=set M=if exist X:\sources\recovery\startrep.exe if "%WINVER%"=="7" echo REPAIR (startrep.exe) found & set S=1if exist X:\sources\recovery\recenv.exe echo RECOVERY ENVIRONMENT (recenv.exe) found & set R=1if exist X:\sources\recovery\tools\MSDartTools.exe echo MSDaRT (MSDartTools.exe) found & set M=1:REPAIRecho.echo ********** REPAIR WINDOWS? ************echo.if "%S%"=="1" echo S = Repair Windows (Startup Repair)if "%R%"=="1" echo R = Recover Windows (Startup Repair, System Restore, etc.)if "%M%"=="1" echo M = MSDaRT (Microsoft Diagnostics)echo N = Install Windows (Windows Setup)echo.if "%R%"=="1" if not "%WINVER%"=="7" echo NOTE: Startup Repair may crash for Win8/10!echo.set /P ASK="Choose an option (press [ENTER] or N to Install Windows)? : "if /I "%ASK%"=="R" start /w X:\sources\recovery\recenv.exeif /I "%ASK%"=="S" start /w X:\sources\recovery\startrep.exeif /I "%ASK%"=="M" start /w X:\sources\recovery\tools\MSDartToolsREM startnet.cmd normally only contains wpeinit.exe, custom ISOs may contain other commands, so try to run themif exist X:\WINDOWS\SYSTEM32\startnet.cmd call cmd /c X:\WINDOWS\SYSTEM32\startnet.cmdif not exist X:\WINDOWS\SYSTEM32\startup.bat exitIF "%DVDDRIVE%"=="" cmdMODE CON COLS=30 LINES=2echo DO NOT CLOSE THIS WINDOWREM X:\Sources\setup.exe /Unattend:%E2BDRIVE%\AutoUnattend.xmlREM X:\Setup.exe will allow the repair option, X:\Sources\Setup.exe will directly run SetupX:\setup.exe
And W8 bat (fails):
@echo off
TITLE %~dpnx0 (WIMBOOT startup.bat)wpeinit.exeREM prevent wpeinit from running againren X:\windows\system32\wpeinit.exe wpeinit.exe.oldfor %%I in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%I:\W864\startup.bat set USBDRIVE=%%I:IF "%USBDRIVE%"=="" (echo ERROR – could not find \W864\startup.bat on any drive! <-- Fails here@echo onfor %%I in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%I:\W864\startup.bat set USBDRIVE=%%I:pausegoto :EOF)color 1fcls@echo FOUND USB DRIVE AT DRIVE %USBDRIVE%SET BIT=32if "%PROCESSOR_ARCHITECTURE%"=="AMD64" SET BIT=64FOR /L %%A IN (0,1,5000) DO ECHO NOTHING > nulcd /d %USBDRIVE%\set MYISO=/Windows/W864.isoecho MYISO sets as %MYISO%echo Looking for X:\Windows\System32\null.cfg contents...for /f "tokens=1,2 delims==" %%a in ('find "installiso=" X:\Windows\System32\null.cfg') do set isopath=%%bREM change linux forward slash to Windows backslashset string1=%isopath:/=\%if exist "%USBDRIVE%%string1%" set MYISO=%string1%if not exist "%USBDRIVE%%MYISO%" if exist X:\Windows\System32\null.cfg type X:\Windows\System32\null.cfgif not exist "%USBDRIVE%%MYISO%" echo ERROR: Can’t find %USBDRIVE%%MYISO% && pause && goto :EOFif exist "%USBDRIVE%%MYISO%" echo Loading %USBDRIVE%%MYISO%...REM Load ISO using ImDiskTITLE LOAD WINDOWS ISO USING IMDISKcall \wimboot\imdisk\IMDISK_install.cmdcall \wimboot\imdisk\IMDISK_instiso.cmdREM Find mounted DVD driveset DVDDRIVE=FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\SOURCES\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\SOURCES\install.*)FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\SOURCES\x86\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\SOURCES\x86\install.*)FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\SOURCES\x64\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\SOURCES\x64\install.*)FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\x86\SOURCES\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\x86\SOURCES\install.*)FOR %%D IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (DIR %%D:\x64\SOURCES\install.* > nul 2>&1 && (call set DVDDRIVE=%%D:) && echo FOUND %%D:\x64\SOURCES\install.*):ENDSEARCHIF "%DVDDRIVE%"=="" echo WARNING: VIRTUAL DRIVE DRIVE NOT FOUND!IF "%DVDDRIVE%"=="" echo WARNING: install.* not found on any mounted volume.IF "%DVDDRIVE%"=="" pauseecho.IF NOT "%DVDDRIVE%"=="" echo ISO FILE MOUNTED AS %DVDDRIVE%ver | find " 10." && set WINVER=10ver | find " 6.2." && set WINVER=8ver | find " 6.3." && set WINVER=8ver | find " 6.1." && set WINVER=7echo.set R=set S=set M=if exist X:\sources\recovery\startrep.exe if "%WINVER%"=="7" echo REPAIR (startrep.exe) found & set S=1if exist X:\sources\recovery\recenv.exe echo RECOVERY ENVIRONMENT (recenv.exe) found & set R=1if exist X:\sources\recovery\tools\MSDartTools.exe echo MSDaRT (MSDartTools.exe) found & set M=1:REPAIRecho.echo ********** REPAIR WINDOWS? ************echo.if "%S%"=="1" echo S = Repair Windows (Startup Repair)if "%R%"=="1" echo R = Recover Windows (Startup Repair, System Restore, etc.)if "%M%"=="1" echo M = MSDaRT (Microsoft Diagnostics)echo N = Install Windows (Windows Setup)echo.if "%R%"=="1" if not "%WINVER%"=="7" echo NOTE: Startup Repair may crash for Win8/10!echo.set /P ASK="Choose an option (press [ENTER] or N to Install Windows)? : "if /I "%ASK%"=="R" start /w X:\sources\recovery\recenv.exeif /I "%ASK%"=="S" start /w X:\sources\recovery\startrep.exeif /I "%ASK%"=="M" start /w X:\sources\recovery\tools\MSDartToolsREM startnet.cmd normally only contains wpeinit.exe, custom ISOs may contain other commands, so try to run themif exist X:\WINDOWS\SYSTEM32\startnet.cmd call cmd /c X:\WINDOWS\SYSTEM32\startnet.cmdif not exist X:\WINDOWS\SYSTEM32\startup.bat exitIF "%DVDDRIVE%"=="" cmdMODE CON COLS=30 LINES=2echo DO NOT CLOSE THIS WINDOWREM X:\Sources\setup.exe /Unattend:%E2BDRIVE%\AutoUnattend.xmlREM X:\Setup.exe will allow the repair option, X:\Sources\Setup.exe will directly run SetupX:\setup.exe
Files with wimboot is on second (NTFS) partition:
/W732/startup.bat
/W764/startup.bat (and more folders for W8 and W10)
/Windows/Windows_ISOs (W732.iso, W764.iso etc.)
/wimboot/wimboot
/wimboot/null.cfg
/wimboot/Imdisk
/wimboot/winpeshl.ini
[LaunchApps]
startup.bat
Edited by jakub.j, 29 May 2022 - 03:06 PM.