@echo off
chcp 65001 > nul
title Windows 설치 날짜 변경기

:: 관리자 권한 확인
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo [!] 관리자 권한으로 실행해야 합니다.
    echo 우클릭 후 '관리자 권한으로 실행'을 선택해 주세요.
    pause
    exit /b
)

echo ========================================================
echo          Windows 설치 날짜 변경 스크립트
echo ========================================================
echo.
echo 변경할 날짜를 입력해주세요. (예: 2025-12-25)
set /p "INPUT_DATE=날짜 (YYYY-MM-DD): "

if "%INPUT_DATE%"=="" (
    echo 날짜가 입력되지 않았습니다. 프로그램을 종료합니다.
    pause
    exit /b
)

echo.
echo [안내] 입력하신 날짜(%INPUT_DATE%)를 타임스탬프로 변환 중...

:: PowerShell을 이용해 입력된 날짜를 유닉스 타임스탬프(초 단위)로 변환
for /f "usebackq" %%i in (`powershell -NoProfile -Command "[int(WNetUse)...] (Get-Date '%INPUT_DATE% 00:00:00').ToUniversalTime() -([datetime]'1970-01-01 00:00:00').TotalSeconds"`) do set "TIMESTAMP=%%i"

:: PowerShell 계산식이 복잡해질 수 있으므로 더 안정적인 방식으로 타임스탬프 추출
for /f "usebackq" %%i in (`powershell -NoProfile -Command "$d = [datetime]'./%INPUT_DATE%'; [int]($d.ToUniversalTime() - [datetime]'1970-01-01').TotalSeconds" 2^>nul`) do set "TIMESTAMP=%%i"

:: 만약 위에서 값이 안 구해졌을 경우 다른 방식으로 재시도
powershell -NoProfile -Command "$date = [datetime]::ParseExact('%INPUT_DATE%', 'yyyy-MM-dd', $null); $ts = [int][Math]::Floor(($date.ToUniversalTime() - [datetime]'1970-01-01 00:00:00').TotalSeconds); Write-Output $ts" > "%temp%\ts_val.txt"
set /p TIMESTAMP=<"%temp%\ts_val.txt"
del "%temp%\ts_val.txt"

if "%TIMESTAMP%"=="" (
    echo [오류] 날짜 형식 변환에 실패했습니다. YYYY-MM-DD 형식으로 정확히 입력해주세요.
    pause
    exit /b
)

echo 변환된 타임스탬프 값: %TIMESTAMP%
echo.

:: 레지스트리 값 수정 (InstallDate)
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v InstallDate /t REG_DWORD /d %TIMESTAMP% /f > nul
if %errorLevel% equ 0 (
    echo [성공] InstallDate 값이 변경되었습니다.
) else (
    echo [실패] 레지스트리 수정 중 오류가 발생했습니다.
    pause
    exit /b
)

:: InstallTime 값이 존재한다면 함께 갱신 (16진수 바이너리 형태이므로 레지스트리에서 삭제하거나 문자열로 덮어쓰기)
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v InstallTime /f > nul 2>&1

echo.
echo ========================================================
echo 모든 작업이 완료되었습니다! 
echo 시스템 설정(정보) 화면을 새로고침하거나 재부팅하면 반영됩니다.
echo ========================================================
pause