@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 원하시는 설치 날짜를 입력해주세요. (예: 2022-11-10)
set /p "INPUT_DATE=날짜 (YYYY-MM-DD): "

if "%INPUT_DATE%"=="" (
    echo 날짜가 입력되지 않았습니다. 프로그램을 종료합니다.
    pause
    exit /b
)

echo.
echo [안내] 입력하신 날짜를 레지스트리 형식으로 변환 중...

:: PowerShell을 이용해 타임스탬프와 파일타임(InstallTime용) 계산
powershell -NoProfile -Command ^
    "$date = [datetime]::ParseExact('%INPUT_DATE%', 'yyyy-MM-dd', $null).ToUniversalTime();" ^
    "$ts = [int][Math]::Floor(($date - [datetime]'1970-01-01').TotalSeconds);" ^
    "$ft = [string]$date.ToFileTime();" ^
    "Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name 'InstallDate' -Value $ts -Type DWord;" ^
    "Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name 'InstallTime' -Value ([byte[]](Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name 'InstallTime' -ErrorAction SilentlyContinue)) -Type Binary -ErrorAction SilentlyContinue;"

if %errorLevel% neq 0 (
    :: 만약 기존 InstallTime 바이트 변환에 실패할 경우, 표준 파일타임 바이너리 데이터로 새로 생성
    powershell -NoProfile -Command ^
        "$date = [datetime]::ParseExact('%INPUT_DATE%', 'yyyy-MM-dd', $null).ToUniversalTime();" ^
        "$ts = [int][Math]::Floor(($date - [datetime]'1970-01-01').TotalSeconds);" ^
        "$ftHex = [System.BitConverter]::GetBytes($date.ToFileTime());" ^
        "Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name 'InstallDate' -Value $ts -Type DWord;" ^
        "New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name 'InstallTime' -Value $ftHex -PropertyType Binary -Force | Out-Null;"
)

echo.
echo ========================================================
echo [성공] 설치 날짜와 시간이 정상적으로 복구 및 적용되었습니다!
echo 설정 화면을 닫았다가 다시 열거나 재부팅하면 날짜가 표시됩니다.
echo ========================================================
pause