@echo off setlocal rem 이 파일은 CP949 로 저장되어 있다. 콘솔이 UTF-8(65001)이면 한글이 깨지므로 949로 고정한다. for /f "tokens=2 delims=:" %%C in ('chcp') do set "OLDCP=%%C" set "OLDCP=%OLDCP: =%" chcp 949 >nul 2>&1 title 전역 지침 적용 v0.3.01 set "SRC=%~dp0" if "%SRC:~-1%"=="\" set "SRC=%SRC:~0,-1%" set "DST=%~1" if "%DST%"=="" set /p "DST=적용할 프로젝트 폴더 경로를 입력하세요: " if "%DST%"=="" goto :NODST if not exist "%DST%\" goto :NODST set "DRY=" set "AUTO=" if /i "%~2"=="/L" set "DRY=/L" if /i "%~3"=="/L" set "DRY=/L" if /i "%~2"=="/Y" set "AUTO=1" if /i "%~3"=="/Y" set "AUTO=1" if defined AUTO goto :RUN echo. echo ==================================================== echo 전역 지침 적용 v0.3.01 echo ==================================================== echo 원본 : %SRC% echo 대상 : %DST% if defined DRY echo 모드 : 미리보기 ^(실제로 쓰지 않음^) echo. echo [A] 지침 / 어댑터 / 스킬 / HMCMkit 자산 =^> 무조건 덮어씀 echo [B] OPEN_미해결목록, state.json 등 =^> 이미 있으면 보존 echo [C] 대상 폴더의 기존 산출물 =^> 건드리지 않음 ^(삭제 없음^) echo 적용 전 context-migration, prompt 를 backup 에 보관합니다. echo. set /p "OK=진행할까요? (Y/N) " if /i not "%OK%"=="Y" goto :ABORT echo. :RUN rem ---------- 폴더 골격 먼저 ---------- for %%D in ("DOC" "Code" "Code\patch" "Code\verify" "RAG" "prompt" "context-migration" "temp" "backup") do call :MK "%%~D" rem DOC 유형축 골격(01_기획~99_기타)은 자체 규약을 선언한 프로젝트에서는 만들지 않는다. ([F10]) rem 선언 방법 : 대상 프로젝트에 DOC\CONVENTION.md 를 두고 무엇을 대체하는지 적는다. if exist "%DST%\DOC\CONVENTION.md" ( echo [건너뜀] DOC 유형축 골격 : 자체 규약 선언 확인 ^(DOC\CONVENTION.md^) ) else ( for %%D in ("DOC\01_기획" "DOC\02_분석" "DOC\03_설계" "DOC\04_실행" "DOC\05_검증" "DOC\06_보고서" "DOC\99_기타") do call :MK "%%~D" ) rem ---------- 덮어쓰기 전 백업 ([F13]) ---------- rem 백업 대상은 프로젝트 고유 자산인 context-migration, prompt 두 폴더뿐이다. rem 지침류(.claude, .agents, README)는 정본에서 언제든 재취득 가능하므로 백업하지 않는다. if defined DRY goto :SKIPBK set "TODAY=" for /f "usebackq delims=" %%i in (`powershell -nop -c "Get-Date -Format yyyy-MM-dd" 2^>nul`) do set "TODAY=%%i" if not defined TODAY set "TODAY=%DATE:~0,10%" set "BK=%DST%\backup\%TODAY%_지침적용전" set "BKDONE=" for %%D in ("context-migration" "prompt") do call :BKUP "%%~D" if defined BKDONE echo [백업] backup\%TODAY%_지침적용전 ^(context-migration, prompt^) :SKIPBK rem ---------- [A] 무조건 덮어쓰기 ---------- call :RC ".claude" call :RC ".agents" rem v0.3.00: 구 어댑터 규칙은 tea-* 스킬로 대체되었으므로 대상에서 제거한다 (robocopy 는 지우지 않는다) if not defined DRY for %%F in ("coding-agent.md" "orchestration.md") do if exist "%DST%\.agents\rules\%%~F" del /Q "%DST%\.agents\rules\%%~F" call :RCH rem 주의: 패키지 root README.md 는 *패키지 자신의 설명서*이므로 대상 프로젝트로 복사하지 않는다. rem (v0.2.03 까지 복사되어 9개 프로젝트의 root README 를 덮어쓴 사고가 있었다) call :CP1 "DOC\README.md" call :CP1 "Code\README.md" call :CP1 "RAG\README.md" rem 공개판: prompt\README.md 에는 부서별 담당자 표가 있으므로 이미 있으면 보존한다 call :CPN "prompt\README.md" call :CP1 "context-migration\README.md" rem ---------- [B] 없을 때만 ---------- call :CPN "context-migration\OPEN_미해결목록.md" call :CPN "context-migration\디자인지침_경로.md" call :CPN ".hmcmkit\state.json" call :CPN ".hmcmkit\blueprint.md" call :CPN ".hmcmkit\config.json" if defined AUTO goto :END echo. echo ---------------------------------------------------- echo 완료. 아래 3가지를 확인하세요. echo 1^) %DST%\.claude\taskexecutionagent.md 상단 버전이 v0.3.01 인지 echo 2^) prompt\README.md 담당자 매핑 표에 본인이 있는지 echo 3^) 기존 산출물^(DOC, prompt^)이 그대로 남아 있는지 echo ---------------------------------------------------- goto :END rem ==================== 서브루틴 ==================== :MK if defined DRY goto :eof if not exist "%DST%\%~1\" mkdir "%DST%\%~1" >nul 2>&1 goto :eof :BKUP if not exist "%DST%\%~1\" goto :eof robocopy "%DST%\%~1" "%BK%\%~1" /E /IS /IT /R:1 /W:1 /NFL /NDL /NJH /NJS /NP >nul set "BKDONE=1" goto :eof :RC if not exist "%SRC%\%~1\" goto :eof robocopy "%SRC%\%~1" "%DST%\%~1" /E /IS /IT %DRY% /R:2 /W:2 /NFL /NDL /NJH /NJS /NP >nul if errorlevel 8 (echo [실패] %~1) else (echo [덮어씀] %~1) goto :eof :RCH if not exist "%SRC%\.hmcmkit\" goto :eof robocopy "%SRC%\.hmcmkit" "%DST%\.hmcmkit" /E /IS /IT /XF state.json blueprint.md config.json %DRY% /R:2 /W:2 /NFL /NDL /NJH /NJS /NP >nul if errorlevel 8 (echo [실패] .hmcmkit) else (echo [덮어씀] .hmcmkit ^(state/blueprint/config 제외^)) goto :eof :CP1 if not exist "%SRC%\%~1" goto :eof if defined DRY echo [덮어씀-예정] %~1 if defined DRY goto :eof if exist "%DST%\%~1" attrib -R "%DST%\%~1" >nul 2>&1 copy /Y "%SRC%\%~1" "%DST%\%~1" >nul if errorlevel 1 (echo [실패] %~1) else (echo [덮어씀] %~1) goto :eof :CPN if not exist "%SRC%\%~1" goto :eof if exist "%DST%\%~1" echo [보존] %~1 if exist "%DST%\%~1" goto :eof if defined DRY echo [생성-예정] %~1 if defined DRY goto :eof copy /Y "%SRC%\%~1" "%DST%\%~1" >nul echo [생성] %~1 goto :eof :NODST echo. echo [오류] 대상 폴더를 찾을 수 없습니다. echo 사용법 : 지침적용.bat "D:\새프로젝트" echo 미리보기 : 지침적용.bat "D:\새프로젝트" /L goto :END :ABORT echo 취소했습니다. :END echo. if not defined AUTO pause if defined OLDCP chcp %OLDCP% >nul 2>&1 endlocal