LGES-OC5-PtoP-Welder/AutoZip.bat
to3796zw 5807279c4f feat: 소스 전용 암호 zip 백업 AutoZip.bat 추가
저장소를 통째로 전달하려면 21.6GB(.git 8.2 / Doc 5.1 / _out 1.2 / packages 1.1 …)를
옮겨야 했다. 실제로 필요한 것은 Visual Studio에서 다시 빌드할 수 있는 소스뿐이고,
그 집합은 2,025개 / 20.2MB → 압축 후 5.8MB 다.

압축 암호는 ub8877 이다. AutoZip.bat 상단 PW 변수에 정의돼 있고 7za 의 -p 로 넘어간다.
zip 기본 암호화(ZipCrypto)를 쓴다 — AES-256 은 구버전 알집에서 열리지 않는 사례가 있어
호환을 택했다. 바꾸려면 압축 명령에 -mem=AES256 만 붙이면 된다.
암호가 걸린 사내 전달용 아카이브이며 자격증명이 아니다.

동작
- 배치파일 위치(%~dp0)를 기준으로만 동작한다. 절대경로 없음.
- 파일 목록을 박아두지 않고 확장자 화이트리스트로 거른다. .cs/.xaml 을 추가해도
  이 배치파일은 고칠 필요가 없다.
- 포함: .sln .csproj .cs .xaml .resx .config .settings .manifest .snk
        + 빌드 리소스 이미지(.png .ico .jpg .bmp .gif .cur .ttf)
  csproj 에 <Resource Include="Resources\*.png" /> 가 있어 이미지를 빼면 빌드가 깨진다.
- 제외: obj bin .git .vs packages _out* External Doc docs _dummyImages
        _workspace .claude .serena __pycache__ 및 이전 *.zip
- 결과물은 루트에 ILSOS_All_src_YYYYMMDD_HHmmss.zip 으로 떨어지고,
  다음 실행 때 압축 대상에서 제외된다(.gitignore 에도 등록).

tools/7za.exe (7-Zip 18.05 x64, 단독 실행본)를 동봉했다. Windows 기본 tar/Compress-Archive
는 암호 zip 을 만들지 못하고 이 PC에 7-Zip 이 설치돼 있지 않아 설치 없이 돌아가게 했다.
7-Zip 은 LGPL 이라 재배포 가능하다.

인코딩은 CP949 로 저장했다. UTF-8 + chcp 65001 조합은 cmd 가 배치 실행 도중 코드페이지를
바꿀 때 파일 읽기 위치가 어긋나 이후 줄이 통째로 오파싱된다(실행 실패 확인).

검증: zip 생성/암호(무암호 테스트 실패·정상 암호 통과)/포함(.cs 1365 .xaml 289 .resx 59
.csproj 45)/제외 전 항목 0건/재실행 시 이전 zip 미포함/cmd 한글 출력 정상.
한계 — External·packages 를 제외하므로 받는 쪽에서 참조 DLL 과 NuGet 패키지는 따로 확보해야 한다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 11:29:45 +09:00

81 lines
2.5 KiB
Batchfile

@echo off
setlocal
rem ============================================================
rem ILSOS 소스 백업 - 빌드에 필요한 소스만 암호 zip 으로 묶는다.
rem
rem - 배치파일이 있는 폴더를 기준(상대경로)으로 동작한다.
rem - 파일 목록을 박아두지 않고 확장자로 거르므로,
rem .cs / .xaml 을 추가해도 이 파일을 고칠 필요가 없다.
rem - 결과 zip 은 다음 실행 때 압축 대상에서 제외된다.
rem ============================================================
cd /d "%~dp0"
set "PW=ub8877"
set "PF86=%ProgramFiles(x86)%"
rem ---- 압축기 찾기 : 동봉본 우선, 없으면 설치본 ----
set "SEVENZIP="
if exist "tools\7za.exe" set "SEVENZIP=tools\7za.exe"
if not defined SEVENZIP if exist "%ProgramFiles%\7-Zip\7z.exe" set "SEVENZIP=%ProgramFiles%\7-Zip\7z.exe"
if not defined SEVENZIP if exist "%PF86%\7-Zip\7z.exe" set "SEVENZIP=%PF86%\7-Zip\7z.exe"
if not defined SEVENZIP (
echo.
echo [오류] 압축기를 찾지 못했습니다.
echo tools\7za.exe 가 없고 7-Zip 도 설치되어 있지 않습니다.
echo tools\7za.exe 를 복원하거나 7-Zip 을 설치한 뒤 다시 실행하세요.
echo.
pause
exit /b 1
)
rem ---- 타임스탬프 (%date% 는 로케일 의존이라 PowerShell 로 받는다) ----
set "TS="
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set "TS=%%i"
if not defined TS set "TS=notime"
set "OUT=ILSOS_All_src_%TS%.zip"
echo.
echo 압축기 : %SEVENZIP%
echo 대상 : %CD%
echo 출력 : %OUT%
echo 암호 : %PW%
echo.
echo 압축 중... (빌드에 필요한 소스만)
echo.
"%SEVENZIP%" a -tzip -mx=9 -p%PW% "%OUT%" ^
-ir!*.sln -ir!*.csproj -ir!*.cs -ir!*.xaml -ir!*.resx -ir!*.config ^
-ir!*.settings -ir!*.manifest -ir!*.snk ^
-ir!*.png -ir!*.ico -ir!*.jpg -ir!*.jpeg -ir!*.bmp -ir!*.gif -ir!*.cur -ir!*.ttf ^
-xr!obj -xr!bin -xr!.git -xr!.vs -xr!packages -xr!_out* -xr!_intermediate ^
-xr!intermediate* -xr!_workspace -xr!_release -xr!_test -xr!Doc -xr!docs ^
-xr!External -xr!.claude -xr!.ubisam_agent -xr!.serena -xr!__pycache__ ^
-xr!UnTrackedLocalFiles -xr!_dummyImages -xr!tools -xr!*.zip -xr!*.7z -xr!*.rar
if errorlevel 1 (
echo.
echo [오류] 압축에 실패했습니다. 위 메시지를 확인하세요.
echo.
pause
exit /b 1
)
set "SIZE=0"
for %%F in ("%OUT%") do set "SIZE=%%~zF"
set /a SIZE_MB=%SIZE% / 1048576
echo.
echo ============================================================
echo [완료] %OUT%
echo %CD%\%OUT%
echo 약 %SIZE_MB% MB (%SIZE% bytes)
echo 암호 : %PW%
echo ============================================================
echo.
pause
exit /b 0