배치 파일에 대해 질문을 하시기 전 먼저 해당 글을 정독하셔서 WIM 이미지(PE 를) 부팅 목록에 추가하는 과정에 대해 정확히 이해하시고 사용하세요. 본 배치 파일은 다음과 같은 구성을 따르고 있습니다.
1. RAMDISK 설치 옵션 생성 - boot.sdi 파일을 통해 {ramdiskoptions} 항목을 생성합니다.
1-1. {ramdiskoptions} 항목을 검색합니다. 만약 해당 항목이 이미 존재한다면 내용을 출력하고 메인으로 돌아갑니다.
1-2. {ramdiskoptions} 항목이 존재하지 않는다면 모든 드라이브의 루트에서 boot.sdi 파일을 검색합니다. boot.sdi 파일을 찾으면 해당 파일을 통해 {ramdiskoptions} 항목을 생성합니다.
1-3. 만약 모든 드라이브의 루트에서 boot.sdi 파일을 찾지 못한다면 사용자에게 boot.sdi 파일의 위치를 수동으로 입력할 것인지를 묻습니다.
1-4. 사용자가 boot.sdi 파일의 위치를 수동으로 입력하면 입력한 경로에 boot.sdi 파일이 정확하게 있는지 다시 한 번 검색합니다.
1-5. 만약 사용자가 입력한 위치에서 boot.sdi 파일을 찾으면 해당 파일을 통해 {ramdiskoptions} 항목을 생성합니다.
2. WIM 이미지 부팅 항목 추가 - WIM 이미지(PE)를 부팅 목록에 추가합니다.
2-1. {ramdiskoptions} 항목을 검색합니다. 만약 해당 항목이 존재하지 않는다면 작업을 종료하고 메인으로 돌아갑니다. 이 때는 1 을 통해 {ramdiskoptions} 항목을 먼저 생성해 주셔야 합니다.
2-2. {ramdiskoptions} 항목을 존재하면 사용자에게 WIM 이미지 파일의 경로와 파일 이름을 입력 받습니다.
2-3. 사용자가 입력한 경로와 이름을 통해 해당 파일이 실제로 그 위치에 있는지 검색합니다. 만약 파일을 찾지 못하면 메인으로 되돌아 갑니다.
2-4. 파일을 찾으면 부팅 목록에 표시할 이름을(Description) 입력 받습니다.
2-5. 사용자의 입력을 토대로 WIM 이미지 부팅 항목을 생성한 후 결과를 출력합니다.
2-6. 현재 부팅 목록의 표시 시간을 출력합니다. 부팅 목록의 표시 시간을 바꿀 것인지를 사용자에게 묻습니다. 바꾸지 않으면 그대로 종료하고 메인으로 되돌아 갑니다.
2-7. 새롭게 설정할 부팅 목록의 표시 시간을 입력 받습니다. 시간은 1~30 초 사이를 입력합니다. 만약 1 초 미만 30 초를 초과한 값을 입력하면 다시 입력 받습니다.
2-8. 부팅 목록 표시 시간을 수정하고 출력해 준 후 메인으로 되돌아 갑니다.
실제 사용 모습
아래와 같이 부팅 목록에 추가할 WIM 이미지 파일과 기초가 되는 boot.sdi 파일을 준비해 보았습니다.
boot.sdi 파일은 C: 드라이브의 루트에 준비를 했습니다.(C:\boot.sdi) 본 배치 파일은 이렇게 드라이브의 루트에 boot.sdi 파일을 준비하는 것을 기초로 합니다. 만약 루트가 아닌 폴더 안에 넣으셔도 직접 수동으로 위치를 입력해 주실 수 있습니다.
부팅 목록에 추가할 WIM 이미지 파일은 C:\Backup\Ghost.wim 파일로 준비를 했습니다.
작업의 순서는 1. RADISK 설치 옵션 생성 -> 2. WIM 이미지 부팅 항목 추가 의 순서로 하시면 됩니다. 최초의 작업이라면 반대의 순서로 하실려고 해도 {ramdiskoptions} 를 먼저 생성하라고 나옵니다.
다운로드 받으신 WIM 부팅 목록 추가.cmd 파일을 마우스 오른쪽 버튼으로 클릭하신 후 관리자 권한으로 실행 합니다.
이후의 과정은 단순하기 때문에 일렬로 보여드리도록 하겠습니다.
사용 법은 굉장히 단순하죠? 그럼 부팅 항목이 정상적으로 꾸며졌는지 재부팅하고 WIM 이미지 파일로 부팅해 본 모습입니다.
기타 작업 모습들
1. RAMDISK 설치 옵션 생성을 실행하였는데 모든 드라이브의 루트에서 boot.sdi 파일을 찾지 못했을 때.
2. 이미 {ramdiskoptions} 항목이 존재하는 경우.
3. {ramdiskoptions} 없이 WIM 부팅 항목을 생성하려는 경우.
WIM 부팅 항목 추가 코드
해당 배치 파일은 신비로그의 운영자인 저 신희돈이 만들었습니다. 여러분들께서 수정하셔서 사용하시는 것은 자유이지만 문구 몇 개 지우고 자기가 만든 것인양 가져가지는 맙시다. 코드가 좀 지저분 합니다. -_-; 이해해 주세요. 지금 당장 봐도 쓸 때 없이 복잡하게 만든 구간이 몇 개 보이네요. 정신줄 놓고 만들어서 그렇습니다. ㅡㅡ;
[WIM 부팅 항목 추가.cmd]
@echo off setlocal pushd %~dp0 :Main cls Color 1f echo. echo WIM 이미지(Windows PE) 부팅 항목 추가 echo echo echo 1) RAMDISK 설치 옵션 생성 echo echo echo 2) WIM 이미지 부팅 항목 추가 echo echo echo 3) 끝내기 echo echo echo 제작 : 신비로그 http://shinb.textcube.com echo echo. :LOOP1 set /p NB1= 원하는 항목을 입력한 후 엔터키를 누르십시요 : if /i "%NB1%" == "1" goto Createsdi1 if /i "%NB1%" == "2" goto Createwim1 if /i "%NB1%" == "3" goto EXIT
if "%errorlevel%"=="1" ( for %%A 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 %%A\boot.sdi ( bcdedit /create {ramdiskoptions} > nul bcdedit /set {ramdiskoptions} ramdisksdidevice partition=%%A > nul bcdedit /set {ramdiskoptions} ramdisksdipath \boot.sdi > nul cls echo %%A\boot.sdi 파일을 사용하여 {ramdiskoptions} 항목를 생성하였습니다. bcdedit /enum {ramdiskoptions} echo. echo. pause goto Main ) echo. echo 어떤 드라이브의 루트에서도 boot.sdi 파일을 찾지 못했습니다. echo. goto Findsdi )
) bcdedit /enum {ramdiskoptions} echo. echo. echo 이미 {ramdiskoptions} 항목이 존재합니다. 메인으로 돌아갑니다. echo. pause goto Main
:Findsdi echo boot.sdi 파일의 위치를 직접 지정해 주시겠습니까? echo. :LOOP2 set /p NB2= (Y/N) : if /i "%NB2%" == "Y" goto Createsdi2 if /i "%NB2%" == "N" goto Main
echo Y or N 만 입력하세요. goto LOOP2
:Createsdi2 cls echo. echo boot.sdi 파일이 위치한 드라이브를 입력하세요. echo ex) c: echo. set /p SDIDN= 드라이브 : echo. echo. echo boot.sdi 파일이 위치한 폴더 경로를 입력하세요. (경로 마지막에 \ 를 반드시 붙이세요) echo ex) \boot\ (루트일 경우 \ 만 입력.) echo. set /p SDIFP= 폴더경로 : echo. echo. echo. echo boot.dsi 파일의 위치는 %SDIDN%%SDIFP%boot.sdi 입니다.
if exist %SDIDN%%SDIFP%boot.sdi ( echo. echo 입력하신 파일을 정상적으로 찾았습니다. 작업을 계속합니다. goto Createsdi3 )
echo. echo. echo 입력하신 파일을 찾지 못했습니다. 다시 정확하게 입력해 주시길 바랍니다. echo. pause goto Createsdi2
if "%errorlevel%"=="1" ( echo. echo 아직 {ramdiskoptions} 항목가 생성되지 않았습니다. echo. echo 먼저 boot.sdi 파일을 통해 {ramdiskoptions} 항목를 생성하시길 바랍니다. echo. pause goto Main )
cls echo. echo WIM 이미지 파일이 위치한 드라이브를 입력하세요. echo ex) c: echo. set /p WIMDN= 드라이브 : echo. echo. echo WIM 이미지 파일이 위치한 폴더 경로를 입력하세요. (경로 마지막에 \ 를 반드시 붙이세요) echo ex) \winpe\ (루트일 경우 \ 만 입력.) echo. set /p WIMFP= 폴더경로 : echo. echo. echo WIM 이미지 파일의 이름을 입력하세요. echo ex) boot.wim echo. set /p WIMFN= 파일이름 : echo. echo. echo 부팅 목록에 추가하려는 이미지 파일은 %WIMDN%%WIMFP%%WIMFN% 파일 입니다.
if exist %WIMDN%%WIMFP%%WIMFN% ( echo 입력하신 파일을 정상적으로 찾았습니다. 작업을 계속합니다. goto Createwim2 )
echo 입력하신 파일을 찾지 못했습니다. 처음부터 다시 시작하세요. pause goto Main
:Createwim2 echo. echo. echo 부팅 목록에 표시할 부팅 항목의 이름을 입력하세요. echo ex) Windows PE 부팅 echo. set /p DSC= 표시이름 :
bcdedit /create /d "%DSC%" /application OSLOADER > guid.tmp for /F "tokens=1" %%B in ('findstr { guid.tmp') do ( bcdedit /set %%B device ramdisk=[%WIMDN%]%WIMFP%%WIMFN%,{ramdiskoptions} > nul bcdedit /set %%B osdevice ramdisk=[%WIMDN%]%WIMFP%%WIMFN%,{ramdiskoptions} > nul bcdedit /set %%B path \windows\system32\winload.exe > nul bcdedit /set %%B systemroot \windows > nul bcdedit /set %%B winpe yes > nul bcdedit /set %%B detecthal yes > nul bcdedit /displayorder %%B /addlast > nul del guid.tmp > nul echo. echo. echo 작업을 모두 마쳤습니다. 아래와 같이 부팅 항목을 생성하였습니다. echo. bcdedit /enum %%B ) echo. echo. echo. bcdedit /enum {bootmgr} | find "timeout" > time.tmp for /F "tokens=2" %%C in (time.tmp) do ( del time.tmp > nul echo 새로운 부팅 항목이 추가되었습니다. echo 현재 부팅 목록의 표시 시간은 %%C 초 입니다. )
echo 부팅 목록의 표시 시간을 새로 설정하시겠습니까? echo. :LOOP3 set /p NB3= (Y/N) : if /i "%NB3%" == "Y" goto Createwim3 if /i "%NB3%" == "N" goto Main
echo Y or N 만 입력하세요. goto LOOP3
:Createwim3 echo. echo. set /p NB4=원하시는 시간을 1 ~ 30 사이로 입력하세요(단위-초) : echo.
if %NB4% gtr 0 ( set NP1=1 ) Else ( set NP1=0 )
if "%NP1%" == "0" goto Return
if %NB4% lss 31 ( set NP2=1 ) Else ( set NP2=0 )
if "%NP2%" == "0" goto Return
:Timeout bcdedit /timeout %NB4% > nul
bcdedit /enum {bootmgr} | find "timeout" > time.tmp for /F "tokens=2" %%D in (time.tmp) do ( del time.tmp > nul echo. echo 부팅 목록의 표시 시간을 %%D 초로 설정하였습니다. ) echo. echo. pause goto Main
:Return echo. echo 잘못된 값을 잘못 입력하셨습니다. 다시 입력하세요. echo. echo. goto Createwim3