예전에 어떤 분이 이 질문을 했었는데요, 어제 자식 VHD 파일 2개 운용하기 글을 포스팅하고나서 생각이 났습니다. 가만히 생각해보니 파일 교체시 굳이 스크립트 2개를 따로 만들 필요가 없습니다. IF ERRORLEVEL과 &를 사용하면 깔끔하게 2줄로 끝낼 수 있습니다.

일단 이 글을 이해하려면 어제 포스팅했던 글을 먼저 이해하셔야 합니다.
2010/09/02 - [Windows 7] - VHD 파일 교체하기 귀찮다면 자식 2개를 운용해보자


한방에 처리하는 스크립트는 대충 이렇습니다.

@echo off
pushd %~dp0
bcdedit /default {78f20410-b0eb-11df-aa6f-e3d504a75150} & copy clean.vhd child1.vhd
if errorlevel 1 bcdedit /default {78f20411-b0eb-11df-aa6f-e3d504a75150} & copy clean.vhd child2.vhd
shutdown /r /t 0
exit

먼저 1번 자식파일을 기본 부팅메뉴로 설정하고, 1번 자식파일 교체를 시도합니다.
이때 교체 작업에서 에러가 발생하면 (현재 1번 자식으로 부팅된 상태라면)
2번 자식파일을 기본 부팅메뉴로 설정하고, 2번 자식파일을 교체합니다.
만약 1번 교체 작업에서 에러가 발생하지 않으면 그대로 1번 자식만 교체되고 바로 Shutdown 명령어로 넘어갑니다. IF ERRORLEVEL 구문은 이렇게 유용하게 쓰일 수 있습니다.

위 예제처럼 구성해두면 파일 클릭시 알아서 현재 사용중이 아닌 자식을 교체하고 그걸로 부팅하게 됩니다. 그렇다면 이 스크립트를 시작프로그램에 등록시켜서 윈도우 진입시 항상 자동으로 교체 작업을 실행하도록 처리해두면 되겠죠? 이렇게 해두면 PC방이나 대학교에서 사용하는 순간 복구 프로그램처럼 매 부팅시 항상 깨끗한 상태로 복원된 윈도우를 사용할 수 있습니다. 게다가 이건 복구 프로그램과 다르게 단순히 파일만 교체하는 작업이니 윈도우 시작시 0.1초도 안 걸립니다. 복구를 위한 시간이 소요되지 않는다는게 큰 매력입니다.

단점이 있다면 프로그램 설치시 재부팅을 요구하는 경우 재부팅 후 멀티부팅 메뉴에서 수동으로 선택을 해줘야 한다는 것입니다. 이미 윈도우 시작시 다른 자식 메뉴가 기본 부팅메뉴로 지정되어 있기 때문입니다. 또한 UAC를 끄고 사용하거나 관리자 계정으로 사용하시는 분들만 이렇게 구성할 수 있습니다. 만약 UAC를 켜고 사용하시는 분들이라면 이 스크립트를 관리자 권한으로 실행하도록 지정을 해야하는데 그러면 매번 윈도우 부팅시 처음에 UAC 확인 창이 뜨기 때문에 귀찮게 됩니다.

사실 이렇게 구성해서 사용하실 분들은 별로 없을 것 같지만 지난번에 질문을 받았기 때문에 혹시나 필요한 분들 계실까봐 소개해드리는 것입니다. 회사에서 공용으로 사용하는 PC에 Diff VHD를 자식 2개로 생성해서 이렇게 시작메뉴에 등록시켜두면 매번 깨끗한 윈도우 상태를 유지할 수 있으니 시스템을 관리하시는 분들에겐 매우 편리한 솔루션이 되겠지요. 따로 프로그램을 사용하는게 아니기 때문에 윈도우가 꼬일 걱정도 없고 MBR 문제나 라이선스 걱정도 없습니다. VHD와 윈도우 커맨드 만으로 모든 작업을 처리하기 때문입니다.


그렇다면 시작프로그램에 등록하기 위한 스크립트는 어떻게 구성해야 할까요? 위 스크립트에서 약간만 바꾸면 됩니다.

@echo off
pushd d:\vhd
bcdedit /default {78f20410-b0eb-11df-aa6f-e3d504a75150} & copy clean.vhd child1.vhd
if errorlevel 1 bcdedit /default {78f20411-b0eb-11df-aa6f-e3d504a75150} & copy clean.vhd child2.vhd
exit

pushd d:\vhd 부분은 VHD 파일을 모아놓은 경로로 커맨드 위치를 이동시키는 것입니다.
shutdown 명령어는 당연히 빼야겠지요. 안 빼면 윈도우 시작하자마자 강제로 재부팅 되니까요. 

이렇게 만들어서 메모장에 넣은 다음 확장자 CMD로 저장해서 시작프로그램 폴더에 넣습니다. 시작프로그램 폴더는 윈도우 탐색기 주소창에 아래 경로를 복사해서 붙여넣으세요.

%AppData%\Microsoft\Windows\Start Menu\Programs\Startup

위 폴더에 교체하기 파일을 넣어주시면 됩니다.



물론 이 파일을 시작프로그램에 넣는 작업은 당연히 부모 VHD로 부팅한 상태에서 해야겠지요? 그래야 자식들한테 늘 적용되니까요. 그리고 이렇게 등록해두면 가끔 업데이트나 설정 변경을 위해 부모 VHD로 부팅한 경우에도 설정을 마치고 재부팅 하면 이미 1번 자식은 교체되어 있고 1번 자식으로 자동 부팅되기 때문에 부모 파일을 업데이트한 후 깜빡하고 자식 VHD를 교체하지 않아서 블루스크린을 보게될 일도 없어집니다.


어차피 자동교체로 사용하실 분들은 거의 없을 것 같은데 괜히 저혼자 열심히 설명했네요. 굳이 시스템 시작시 자동교체하는 방법은 사용하지 않는다 하더라도 제일 처음에 소개해드린 방식으로 스크립트를 만들면 현재 어떤 자식으로 부팅했는지 확인해볼 필요 없이 파일 하나로 처리가 되기 때문에 어제 포스팅했던 글보다 좀 더 편리해졌다고 생각합니다.