@echo off title %~nx0 REM ################################################################################## REM * MBR/ブートセクタのバックアップ REM http://www10.plala.or.jp/palm84/archives/commandline/backup/dd-dd-backup.bat.txt REM https://eu7w9wsmf6a74xyjdfzl3q-on.drv.tw/archives/commandline/backup/dd-dd-backup.bat.txt REM ################################################################################## REM ### UAC Check REM ##################################### set Policies=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System for /f "usebackq tokens=3" %%x in (`reg query %Policies% /v EnableLUA 2^>nul ^| findstr /i EnableLUA`) do set "EnableLUA=%%x" if "%EnableLUA%"=="0x1" ( if /i not "%cd%"=="%windir%\system32" GOTO UAC ) pushd %~dp0 for /f "delims=" %%I in ("fsutil.exe") do set "fsutil_exe=%%~$PATH:I" for %%x in (dd\dd.exe,dd.exe) do if exist %%x set dd_exe=ok if exist UnxUtils\usr\local\wbin\dd.exe set uu_dd_exe=ok if not defined fsutil_exe GOTO NOFILE if not defined dd_exe GOTO NOFILE if not defined uu_dd_exe GOTO NOFILE path=%cd%;%cd%\dd;%path% REM ##################################### REM ### START REM ##################################### :START cls echo: echo ************************************************************** echo * === MBR / ブートセクタを保存します! === * echo ************************************************************** echo * === Explorer などファイラーは閉じてクダサイ === * echo ***** ***** echo * === 保存する名前(ディレクトリ名) を指定シテクダサイ === * echo * === 未入力なら dd_Test となります === * echo * === * 99 で中断 * === * echo ************************************************************** echo: set /p dirname= [入力 , 99] : echo: if "%dirname%"=="" set "dirname=dd_Test" if "%dirname%"=="99" GOTO END if not exist "%dirname%\" mkdir %dirname% pushd %dirname% REM ##################################### REM ### dd REM ##################################### echo: set list=%cd%\dd_list.txt 2>"%list%" dd --list for /l %%x in (0,1,4) do ( findstr /l Device\Harddisk%%x "%list%" >nul if not ERRORLEVEL 1 ( echo --------------------- echo * Device\Harddisk%%x echo --------------------- dd if=\\?\Device\Harddisk%%x\Partition0 of=mbr_hd%%x.bin bs=512 count=1 dd if=\\?\Device\Harddisk%%x\Partition0 of=mbr_hd%%x_65.bin bs=512 count=65 dd if=\\?\Device\Harddisk%%x\Partition0 of=mbr_hd%%x_2050.bin bs=512 count=2050 for %%I in (mbr_hd%%x.bin) do if "%%~zI"=="0" ( REM if not exist mbr_hd%%x.bin ( dd if=\\?\Device\Harddisk%%x\Partition0 of=mbr_hd%%x_4K.bin bs=4096 count=1 dd if=\\?\Device\Harddisk%%x\Partition0 of=mbr_hd%%x_4Kx257.bin bs=4096 count=257 ) echo: )) popd REM ##################################### REM ### UnixUtils dd REM ##################################### echo: path=%cd%\UnxUtils\usr\local\wbin;%path% pushd %dirname% for %%x 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 %%x:\ ( fsutil fsinfo drivetype %%x: | findstr /i "CD-ROM リモート ネットワーク ありません" >nul REM reg query HKLM\SYSTEM\MountedDevices /v \DosDevices\%%x: | findstr /i 4300640052006F006D00 >nul 2>nul if ERRORLEVEL 1 ( echo --------------------- echo * %%x: Drive echo --------------------- dd if=\\.\%%x: of=pbs_%%x.bin bs=512 count=1 dd if=\\.\%%x: of=pbs_%%x_20.bin bs=512 count=20 for %%I in (pbs_%%x.bin) do if "%%~zI"=="0" ( dd if=\\.\%%x: of=pbs_%%x_4K.bin bs=4096 count=1 dd if=\\.\%%x: of=pbs_%%x_4Kx10.bin bs=4096 count=10 ) echo: ))) GOTO DONE REM ##################################### REM ### NOFILE REM ##################################### :NOFILE echo: echo: echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if not defined uu_dd_exe ( echo: echo ! UnixUtils の dd.exe がありませぬ! ) if not defined dd_exe ( echo: echo ! dd for Windows の dd.exe がありませぬ! ) if not defined fsutil_exe ( echo: echo ! fsutil_exe がありませぬ! ) 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 *** Done ! *** echo ==================================================================== echo * ディレクトリ %dirname% に保存しました! echo ==================================================================== echo: :END echo: echo *** 何かキーを押すと閉じます *** echo: pause >nul for /f "usebackq delims=" %%I in (`dir /a-d/b mbr_*.bin`) do ( if "%%~zI"=="0" del /f/a %%I ) for /f "usebackq delims=" %%I in (`dir /a-d/b pbs_*.bin`) do ( if "%%~zI"=="0" del /f/a %%I )