home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 July & August / PCWorld_2004-07-08_cd.bin / Software / vyzkuste / xp / pebuilder3032.exe / plugin / pehdinst / pehdinst.cmd < prev    next >
OS/2 REXX Batch file  |  2004-02-17  |  7KB  |  219 lines

  1. @echo off
  2. title BartPE Harddisk Installer v1.0.3
  3. echo BartPE Harddisk Installer v1.0.3
  4. echo Copyright (c) 2003 Bart Lagerweij. All rights reserved.
  5. echo This program is free software. Use and/or distribute it under
  6. echo the terms of the Nu2 License (see nu2lic.txt file).
  7. setlocal
  8. %~d0
  9. cd "%~dp0"
  10. for %%i in (_source _target) do set %%i=
  11. :_arg
  12. for %%i in (-h -H) do if "%%i" == "%1" goto _usage
  13. if "%1" == "-b" goto _b
  14. if "%1" == "-f" goto _f
  15. if "%_source%" == "" if not "%1" == "" goto _1
  16. if "%_target%" == "" if not "%1" == "" goto _2
  17. goto _start
  18. :_b
  19. set _go=_bootini
  20. goto _next
  21. :_f
  22. set _go=_fresh
  23. goto _next
  24. :_1
  25. set _source=%1
  26. goto _next
  27. :_2
  28. set _target=%1
  29. goto _next
  30. :_next
  31. shift
  32. if "%1" == "" goto _start
  33. goto _arg
  34. :_usage
  35. echo.
  36. echo Usage: %~n0 [Options] [SourcePath] [TargetPath]
  37. echo.
  38. echo SourcePath: the path where bartPE can be found. By default the drive where 
  39. echo             %~n0 is located is used.
  40. echo TargetPath: is the path to where bartPE will be installed.By default drive 
  41. echo             C: is used.
  42. echo Options:
  43. echo -b          Install BartPE into boot.ini (choice 1)
  44. echo -f          Install BartPE as primary OS (choice 2)
  45. echo -h          Help
  46. goto _end
  47. :_start
  48. echo PEHDINST: Checking for required file(s)...
  49. for %%i in (mkbt.exe) do if not exist %%i (
  50.     echo PEHDINST: Required file %%i not found!
  51.     goto _abort)
  52. if "%_source%" == "" set _source=%~d0
  53. if "%_target%" == "" set _target=c:
  54. echo PEHDINST: Source="%_source%" Target="%_target%"
  55. if not exist "%_source%\i386\setupldr.bin" (
  56.     echo PEHDINST: Invalid BartPE source, file "%_source%\i386\setupldr.bin" not found.
  57.     goto _usage)
  58. :_main
  59. if not "%_go%" == "" goto %_go%
  60. echo.
  61. echo  1) Install BartPE to %_target%, next to your existing Windows (boot.ini).
  62. echo     This will:
  63. echo     - Install %_target%\peboot.bin and %_target%\peldr.
  64. echo     - Add peboot.bin to your boot.ini file.
  65. echo     - Remove %_target%\minint and %_target%\programs and copy it from
  66. echo       %_source%.
  67. echo  2) Install BartPE to %_target%, as the primairy OS.
  68. echo     This will:
  69. echo     - Delete all partitions on disk 0 and create a new partition and a NTFS 
  70. echo       volume for BartPE (only the first time).
  71. echo     - Remove %_target%\minint and %_target%\programs and copy it from
  72. echo       %_source%.
  73. echo  Q) Quit.
  74. echo.
  75. :_mainch
  76. set _ok=
  77. set /p _ok=Enter your choice [1/2/Q] :
  78. if "%_ok%" == "1" goto _bootini
  79. if "%_ok%" == "2" goto _fresh
  80. if "%_ok%" == "q" goto _end
  81. goto :_mainch
  82.  
  83. :_bootini
  84. echo PEHDINST: Checking if NT Loader is installed on drive %_target%
  85. if not exist %_target%\ntldr (
  86.     echo PEHDINST: Oops, file "%_target%\ntldr" not found.
  87.     goto _abort)
  88.  
  89. echo PEHDINST: Checking if boot.ini is on drive %_target%
  90. if not exist %_target%\boot.ini (
  91.     echo PEHDINST: Oops, file "%_target%\ntldr" not found.
  92.     goto _abort)
  93.  
  94. if exist %_target%\peboot.bin goto _instldr
  95.  
  96. echo PEHDINST: Installing PE Bootsector (peboot.bin)
  97. mkbt.exe -x -c %_target% %_target%\peboot.bin
  98. if errorlevel 1 goto _abort
  99. echo PEHDINST: Updating peboot.bin
  100. nt2peldr.exe %_target%\peboot.bin
  101. if errorlevel 1 goto _abort
  102. echo PEHDINST: Updating boot.ini
  103. findstr /I /B /L /V "%_target%\peboot.bin" %_target%\boot.ini > %_target%\boot$.ini
  104. echo %_target%\peboot.bin="Boot BartPE (by PE Builder)" >> %_target%\boot$.ini
  105. attrib -r -h -s %_target%\boot.ini
  106. if errorlevel 1 goto _abort
  107. del /q /f %_target%\boot.ini
  108. if errorlevel 1 goto _abort
  109. ren %_target%\boot$.ini boot.ini
  110. if errorlevel 1 goto _abort
  111. attrib +r +h +s %_target%\boot.ini
  112.  
  113. :_instldr
  114. echo PEHDINST: Installing PE Loader (peldr)
  115. rem copy %~d0\i386\setupldr.bin %_target%\ntldr
  116. copy %_source%\i386\setupldr.bin %_target%\peldr
  117. if errorlevel 1 goto _abort
  118. goto _inst
  119.  
  120. :_fresh
  121. echo Check if running bartPE...
  122. reg.exe query HKLM\system\currentcontrolset\control\minint >nul 2>&1
  123. if errorlevel 1 goto _nowinpe
  124. :_fresh1
  125. echo Listing disk(s) and disk 0 details...
  126. diskpart.exe /s "pelist.txt"
  127. if errorlevel 1 goto _abort
  128. echo.
  129. echo Do you want to install BartPE from drive %_source% to disk 0?
  130. echo -- THIS WILL TOTALLY ERASE ALL DATA ON YOUR DISK! --
  131. echo.
  132. set _ok=
  133. set /p _ok=To continue type "YES" (uppercase without quotes) :
  134. if "%_ok%" == "YES" goto _insthd
  135. echo PEHDINST: You typed "%_OK%", quitting...
  136. goto _end
  137. :_nowinpe
  138. echo.
  139. echo PEHDINST: Not booted from BartPE, quitting...
  140. goto _end
  141. :_exist
  142. echo PEHDINST: bartPE is already installed on %_target%\
  143. echo PEHDINST: When reinstalling again only the files will be recopied.
  144. echo PEHDINST: The partition/volume will not be reformatted!
  145. echo.
  146. set _ok=
  147. echo PEHDINST: Do you want to reinstall?
  148. set /p _ok=Type "y" for Yes, "n" for No, "f" for Fresh install [Y/N/F] :
  149. if "%_ok%" == "Y" goto _inst
  150. if "%_ok%" == "y" goto _inst
  151. if "%_ok%" == "N" goto _end
  152. if "%_ok%" == "n" goto _end
  153. if "%_ok%" == "F" goto _fresh
  154. if "%_ok%" == "f" goto _fresh
  155. :_insthd
  156. echo.
  157. echo PEHDINST: Creating new NTFS partition on disk 0
  158. diskpart.exe /s "pepart.txt" 
  159. if errorlevel 1 goto _abort
  160. echo Formating %_target%
  161. format %_target% /fs:ntfs /v:bartPE /q /force
  162. if errorlevel 1 goto _abort
  163. echo PEHDINST: Installing ntdetect
  164. copy %_source%\i386\ntdetect.com %_target%\
  165. if errorlevel 1 goto _abort
  166. echo PEHDINST: Installing ntldr
  167. copy %_source%\i386\setupldr.bin %_target%\ntldr
  168. if errorlevel 1 goto _abort
  169. :_inst
  170. echo PEHDINST: Installing bartPE files from drive %_source% to %_target%\
  171.  
  172. call :_copy i386 minint
  173. if errorlevel 1 goto _abort
  174. call :_copy programs programs
  175. if errorlevel 1 goto _abort
  176.  
  177. copy %_source%\winbom.ini %_target%\winbom.ini
  178. if errorlevel 1 goto _abort
  179. echo.
  180. echo PEHDINST: Installation completed...
  181. goto _end
  182. :_copy
  183. if "%~1" == "" goto :eof
  184. if "%~2" == "" goto :eof
  185. if not exist "%_source%\%~1" goto :eof
  186. if exist "%_target%\%~2" (
  187.     echo PEHDINST: Checking for BartPE tag file...
  188.     if not exist "%_target%\%~2\bartpe.tag" goto _tagerr
  189.     echo PEHDINST: Removing %_target%\%~2
  190.     rmdir /s /q "%_target%\%~2\")
  191.     if errorlevel 1 goto :eof
  192.     mkdir "%_target%\%~2\"
  193.     if errorlevel 1 goto :eof
  194.     echo Tag file for BartPE do not remove! > "%_target%\%~2\bartpe.tag"
  195.     if errorlevel 1 goto :eof
  196. echo PEHDINST: Copying files from "%_source%\%~1" to "%_target%\%~2"
  197. xcopy /e /s "%_source%\%~1\*.*" "%_target%\%~2\"
  198. goto :eof
  199. :_tagerr
  200. echo PEHDINST: Tag file "%_target%\%~2\bartpe.tag" not found!
  201. echo PEHDINST: Not safe to remove directory!
  202. echo.
  203. echo Workaround:
  204. echo You could delete the folder "%_target%\%~2" manually and restart the installation...
  205. rem set errorlevel to 1 by (mis)using color
  206. color 00 
  207. goto :eof
  208. :_abort
  209. echo.
  210. echo PEHDINST: Aborted...
  211. endlocal
  212. pause
  213. goto :eof
  214. :_end
  215. endlocal
  216. echo.
  217. echo PEHDINST: Done
  218. pause
  219.