IT인터넷

Windows 배치파일 자가삭제 설정

ヴァレンタイン 2023. 12. 10. 04:55
반응형

자가삭제 설정

Bat 또는 cmd 파일로 작성하면
실행 후 자가삭제가 가능하게 설정하려면 어떻게 해야 하나요?

@echo off

echo 기존의 윈도우 키를 삭제 합니다.
echo.
pause
slmgr.vbs /upk

echo.
echo.
echo 레지스트리에 있는 제품키를 삭제 합니다.
echo.
pause
slmgr.vbs /cpky

goto CDKEY

:CDKEY
set /p choice=홈에디션으로 변경을 하는 것이 맞으세요? 예(Y) / 아니오(N) : 

if "%choice%" == "y" goto :YES

if "%choice%" == "n" goto :CDKEY

goto NO

:YES

echo.
echo.
echo 원도우10 제품키 변경 시작
echo.
pause
slmgr.vbs -ipk 제품키

echo.
echo.
echo 원도우10 제품인증 받기
echo.
pause
slmgr.vbs -ato

echo.
echo.
echo 원도우10 제품인증 확인
echo.
pause
slmgr.vbs -dlv

:NO
echo.
echo.
exit

· 해결방법

/* 해결방법 */
del %0

이렇게 하면 해결됩니다

· 안전하게

/* 안전하게 */
if exist "%0" (
  del "%0"
)

웬만하면 이런 식으로 하시기 바랍니다.

배치파일에서 문제가 되는 부분이 여럿 있지만 중요한 것 중에 하나가
"경로명으로 가능한 문자가 인식 안 되는 현상"입니다.


대표적인 것이! % ^ & 이 4글자입니다.

저 글자들은 폴더명 파일명이 가능하지만 cmd에서
여러 명령어로도 쓰이는 글자인데 제대로 된 구분이 잘 안 되게 구성이 되어있습니다.


이게 상위경로명이나 폴더명에 있을 경우 적절한 처리가 되지 않으면 오류 나거나 버그 생깁니다.

즉 "잘못된 삭제"가 발생할 가능성이 있다는 거죠.(실행 안 되는 정도면 다행이겠죠.)

· 좀 더 안전하게

/* 좀 더 안전하게 */
setlocal DisableDelayedExpansion
cd /d %~dp0
if exist "%0" (
  del "%~nx0"
)
SETLOCAL ENABLEDELAYEDEXPANSION

좀 더 안전하게 하려면 이게 좋습니다.

잘못하면 상위 파일 중에 겹치는 게 지워질 수 있으니까요.

유익한 정보였으면 좋겠습니다.

반응형