@echo off title %~nx0 ver | find "Version 6" >nul && set osver=vista if "%osver%"=="vista" ( if /i not "%cd%"=="%windir%\system32" GOTO UAC pushd %~dp0 ) REM check vfd.exe if exist .\vfd\vfd.exe set vfdexe=ok if exist vfd.exe set vfdexe=ok REM check grubinst.exe if exist .\grubinst\grubinst.exe set grubinst=ok if exist grubinst.exe set grubinst=ok REM check grldr if exist .\grub4dos\grldr set grldr=.\grub4dos\grldr if exist grldr set grldr=grldr REM check menu.lst if exist .\grub4dos\menu.lst set menulst=.\grub4dos\menu.lst if exist menu.lst set menulst=menu.lst REM check dd.exe if exist dd.exe set ddexe=ok if exist .\dd\dd.exe set ddexe=ok if "%vfdexe%"=="" GOTO NOVFD if "%grubinst%"=="" GOTO NOGRINST if "%grldr%"=="" GOTO NOGRLDR if "%ddexe%"=="" GOTO NODD echo: if "%menulst%"=="" echo ===== ! menu.lst がありません ! ===== echo: echo: echo ************************************************************** echo * * echo * === GRUB for DOS 起動ディスクイメージ の作成 === * echo * * echo * **** vfd.exe, dd.exe, grubinst.exe, grldr が必要です **** * echo * * echo * === 保存ファイル名は grub4dos.img です === * echo * * echo ************************************************************** echo: echo 続行しますか? 中断は xボタン or Ctrl-C echo: echo *** 何かキーを押すと続行します *** pause >nul set path=.\grubinst;%path% set path=.\dd;%path% REM ##################################### REM ### Image make REM ##################################### cls echo: echo ..... dd で 空イメージを作成します ..... echo: dd if=/dev/zero of=temp.img bs=512 count=2880 --progress REM ##################################### REM ### Image mount REM ##################################### set path=.\vfd;%path% echo: echo ..... vfd.exe でイメージをフォーマットします ..... echo: for %%x in (V,W,X,Y,Z) do ( reg query HKLM\SYSTEM\MountedDevices | findstr \\%%x: >nul || echo %%x>>akidrive.txt ) for /f %%x in (akidrive.txt) do ( if not exist %%x:\ set vfdrive1=%%x ) del akidrive.txt 2>nul if "%vfdrive1%"=="" GOTO NODRIVE REM if vfdrive1 cannot mount ... REM set vfdrive1=R VFD.EXE STOP /FORCE 2>nul VFD.EXE START if ERRORLEVEL 1 GOTO ERROR1 VFD.EXE ULINK * VFD.EXE link 0 %vfdrive1% VFD.EXE OPEN .\temp.img /RAM /W if ERRORLEVEL 1 GOTO ERROR2 VFD.EXE FORMAT %vfdrive1%: /FORCE if ERRORLEVEL 1 GOTO ERROR3 REM ##################################### REM ### file copy REM ##################################### echo: echo ..... grldr をコピーします ..... echo: copy "%grldr%" %vfdrive1%:\ if ERRORLEVEL 1 GOTO ERROR echo: echo ..... menu.lst をコピーします ..... echo: copy "%menulst%" %vfdrive1%:\ echo: echo: VFD.EXE SAVE %vfdrive1%: .\temp.img /FORCE if ERRORLEVEL 1 GOTO ERROR4 VFD.EXE CLOSE %vfdrive1%: /FORCE VFD.EXE STOP VFD.EXE REMOVE REM ##################################### REM ### GRUB install REM ##################################### :WRITE echo: echo ************************************************************** echo GRUB ブートコードをイメージへ書き込みます echo " The MBR/BS has been successfully installed " echo と表示されたら成功です。Enter で終了処理します。 echo ************************************************************** echo: grubinst --pause --floppy temp.img if ERRORLEVEL 1 GOTO ERROR REM ## old file rename if not exist grub4dos.img GOTO SAVE for %%I in (grub4dos.img) do set bt=%%~tI set bt=%bt: =% set bt=%bt:~-13,2%%bt:~-10,2%%bt:~-7,2%_%bt:~-5,2%%bt:~-2,2%_%RANDOM% for %%I in (grub4dos.img) do set backname=%%~nI_%bt%%%~xI ren grub4dos.img %backname% :SAVE ren temp.img grub4dos.img GOTO DONE REM ##################################### REM ### No Files REM ##################################### :NOVFD echo: echo ============================================================== echo vfd.exe がありませんです... echo ============================================================== GOTO NOGRINST :NOGRINST if not "%grubinst%"=="" GOTO NOGRLDR echo: echo ============================================================== echo grubinst.exe がありませんです... echo ============================================================== GOTO NOGRLDR :NOGRLDR if not "%grldr%"=="" GOTO NODD echo: echo ============================================================== echo grldr がありませんです... echo ============================================================== GOTO NODD :NODD if not "%ddexe%"=="" GOTO NOFILES echo: echo ============================================================== echo dd.exe がありませんです... echo ============================================================== GOTO NOFILES REM ##################################### REM ### VFD ERROR REM ##################################### :NODRIVE echo: echo ============================================================== echo ! V -Z に空きドライブ文字がありません ! echo ============================================================== echo: VFD.EXE STOP /FORCE VFD.EXE REMOVE /FORCE GOTO END :ERROR1 echo: echo ============================================================== echo ! Virtual Floppy Drive を開始できない様です ! echo ============================================================== echo: VFD.EXE STOP /FORCE VFD.EXE REMOVE /FORCE GOTO END :ERROR2 echo: echo ============================================================== echo ! ドライブ0 でFDイメージのマウントに失敗した様です ! echo ============================================================== echo: VFD.EXE STOP /FORCE VFD.EXE REMOVE /FORCE GOTO END :ERROR3 echo: echo ============================================================== echo !ドライブ0 で でFDイメージのフォーマットに失敗した様です! echo ============================================================== echo: VFD.EXE STOP /FORCE VFD.EXE REMOVE /FORCE GOTO END REM ##################################### REM ### dd save REM ##################################### :ERROR4 echo: echo ============================================================== echo ! temp.img を保存時にエラーが発生しました ! echo ============================================================== echo: echo *** dd コマンドでのイメージの保存を試してみますか? *** echo: echo * *** 中断は qq を入力して Enter *** * echo: set /p choice= [ y,qq ] : echo: if /i "%choice%"=="y" GOTO ddsave if /i "%choice%"=="qq" GOTO CANCEL echo: GOTO ERROR4 :ddsave set path=.\dd;%path% echo: echo ......... dd コマンドでイメージを保存しています ............ echo: dd if=\\.\%vfdrive1%: of=temp.img bs=1440k --progress echo: echo: if ERRORLEVEL 1 ( echo ! エラーでした。すんません.....! GOTO ERROR ) else ( echo ********** 隊長!成功したもようです! temp.img を保存しました ********** ) echo: VFD.EXE STOP /FORCE VFD.EXE REMOVE /FORCE echo: echo: echo *** 続きまして GRUBを temp.img インストールにチャレンジ *** echo: echo *** 何かキーを押すと続行します *** echo: pause >nul if "%errorlevel%"=="0" GOTO WRITE echo: GOTO END REM ##################################### REM ### ERROR REM ##################################### :NOFILES echo: echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo !!! !!! echo !!! !ファイルが足りないのて中断しますです... !!! echo !!! !!! echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo: GOTO END :ERROR echo: echo ** ! エラー出ますた ! ! ** echo: VFD.EXE STOP /FORCE VFD.EXE REMOVE /FORCE GOTO END :CANCEL VFD.EXE STOP /FORCE VFD.EXE REMOVE /FORCE echo: echo キャンセルしますた... GOTO END REM ##################################### REM ### UAC REM ##################################### :UAC echo: echo: echo: echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo: echo !「管理者として実行」してくださいマセ ! echo: echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo: GOTO END REM ##################################### REM ### DONE REM ##################################### :DONE echo: echo 正常に終了しますた... echo: if "%menulst%"=="" ( echo ...でも...menu.lst がありませんでした..... ) GOTO END :END echo: echo *** 何かキーを押すと閉じます *** echo: pause >nul