윈 도 우 diskpart 질문좀 드리겠습니다.
2019.02.07 16:57
안녕하세요
우선 윈포 사용자분들 모두 새 복 많이 받으세요~
다름이 아니라 diskpart를 이용해 뭐좀 해보려 하는데요
이놈 윈도10이 꼭 메이저 업데이트 할때마다 복구 파티션을 생성해 버리는 바람에 그게 문제되고 있습니다.
혹시 diskpart를 이용해서 자동으로 복구 파티션을 체크하여 해당 파티션을 제거하거나 해당 파티션 다음에 위치한 파티션을 선택할 수 있는 방법이 있을까요?
항상 수동으로만 하다보니 귀찮아져서 배치파일 만들어보려 합니다.
구글링 하니 diskpart /partition_name라는 명령어도 있는것 같고...
제가 하려는 방식은 다음과 같습니다.
1. diskpart를 이용하여 특정 파티션 레이블을 찾아 포맷한다
2. 역시 diskpart를 이용하여 윈도우에서 생성한 복구 파티션을 체크하여 삭제한다.
(만약 2번이 어려우면 바로 다음 파티션을 선택한다.)
이렇게 하여 dism으로 백업하고 복구하고 이걸 만들려고 합니다.
고수분들의 도움 부탁드립니다. ㅜㅜ
감사합니다.
댓글 [2]
-
히이이잌 2019.02.07 18:56
-
천공의아키라 2019.02.08 10:37
답변 정말 감사드립니다
근데 제가 컴알못이라 배치파일 주신걸 봐도 내용을 전혀 이해하지 못하겠네요 ㅜㅜ
전 단순하게 sel dis 나 sel par assign letter set id등 이런 기능만 이용했는데 모르는 기능이 너무 많네요 ㅜㅜ
단순하게
0번 디스크를 2개의 파티션으로 나누어 1번 파티션은 윈도우를 설치하고 2번 파티션에 백업하고 복구하게 하고 싶은데 RS 업데이트시 1번과 2번 사이에 복구 파티션이 만들어져서 문제가 발생히여 윈도우에서 생성한 복구 파티션을 체크할 수 있는지 다시 답변 주시면 감사하겠습니다.
제가 예전에 비슷한 목적으로 짯던 코드입니다. 참고만 하세요.
REMOVE.cmd
아래의 내용은 위 배치파일의 내용 중 필요없는 부분을 쳐내고 설명을 더 달은겁니다.
위 배치파일은 자기 자신이 존재하는 파티션을 삭제시켜야 하는 상황을 전제로 한거라 개판이니 그냥 아래 내용을 참고해주세요.
일단 한가지 먼저 확인하셔야할게 제 경우엔 단순히 문자 할당 안된 파티션을 끄집어내서 날리고 합치는 과정이지만,
질문자분이 원하시는건 파티션 id부터가 변경되어있는 시스템 파티션을 건드는거라 set id 명령 등이 추가로 필요할 수 있습니다.
대상 파티션의 정보를 미리 얻은 다음, 해당 파티션 번호를 기준으로 작업합니다.
아래의 예시에서 복원파티션의 볼륨명은 RECOVERY_Y 입니다.
임시로 문자열 Y를 할당시킵니다
아마 단순 삭제목적이라면 좀 더 짧게 짤 수 있을텐데, 제 경우엔 잠시 할당시켜야 할 이유가 있었어서 할당을 먼저 합니다.
REC_VOL : 볼륨번호
CUR_LETTER : 현재 할당된 문자
::=====================디스크 숨김해제=================================
echo list volume >"%temp%\LV.txt"
echo exit >>"%temp%\LV.txt"
diskpart /s "%temp%\LV.txt">"%temp%\LV2.txt"
for /f "tokens=2,3 usebackq" %%a in (`"findstr "RECOVERY_Y" "%temp%\LV2.txt""`) do set REC_VOL=%%a&&set CUR_LETTER=%%b
echo.
IF %CUR_LETTER% EQU RECOVERY_Y (
ECHO 드라이브는 %REC_VOL% 번 볼륨입니다.
echo. 현재 드라이브 문자가 할당되어 있지 않습니다.
)
IF %CUR_LETTER% NEQ RECOVERY_Y (
ECHO 드라이브는 %REC_VOL% 번 볼륨입니다.
ECHO 현재 %CUR_LETTER%: 드라이브에 할당되어 있습니다.
goto SKIP_RM_R1
)
echo sel vol %REC_VOL% >"%temp%\LV.txt"
echo ass letter=Y >>"%temp%\LV.txt"
echo exit >>"%temp%\LV.txt"
diskpart /s "%temp%\LV.txt">nul
echo.
echo RECOVERY_Y 드라이브에 문자를 할당했습니다.
echo.
:SKIP_RM_R1
DEL /Q "%temp%\LV.txt">nul
DEL /Q "%temp%\LV2.txt">nul
::=====================================================================
↓
instdsk 변수에 복원파티션의 디스크 번호를
instpar 변수에 복원파티션의 파티션 번호를 저장합니다
:: 현재 Y드라이브 디스크/파티션 번호 얻기=============================
set instdsk=0
set instpar=0
setlocal enabledelayedexpansion
cls
:: 볼륨 정보를 표시하기 위한 스크립트 작성
echo sel vol y > "%temp%\vtemp.txt"
echo detail vol >> "%temp%\vtemp.txt"
echo lis par >> "%temp%\vtemp.txt"
echo exit >> "%temp%\vtemp.txt"
:: 스크립트 실행결과를 vol.txt에 저장
diskpart /s "%temp%\vtemp.txt" > "%temp%\vol.txt"
for /f "tokens=3 usebackq delims= " %%a in (`"find "* 디스크" "%temp%\vol.txt""`) do set instdsk=%%a
for /f "tokens=3 usebackq delims= " %%b in (`"find "* 파티션" "%temp%\vol.txt""`) do set instpar=%%b
:: 사용된 임시파일 삭제
del /s /q "%temp%\vol.txt" >nul
del /s /q "%temp%\vtemp.txt" >nul
:: ===================================================================
::합칠 파티션(삭제 예정 파티션 번호에서 1을 뺀 값) 번호를 구합니다
set /a extpar=%instpar%-1
:: 파티션을 삭제하고 앞 파티션에 합칩니다
:DEL_PAR
sel vol y>C:\del_par.txt
del vol >>C:\del_par.txt
sel disk %instdsk% >>C:\del_par.txt
sel par %extpar% >>C:\del_par.txt
extend>>C:\del_par.txt
diskpart /s C:\del_par.txt
del /q C:\del_par.txt