|
|
- @echo off
- setlocal EnableExtensions EnableDelayedExpansion
- chcp 65001 >nul
- :: 将系统安装日期/时间重置为当前时刻
- :: 对应程序功能:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
- :: InstallDate = REG_DWORD (Unix 时间戳,秒)
- :: InstallTime = REG_QWORD (Windows FILETIME,UTC)
- echo ========================================
- echo 修改系统安装日期为今天
- echo ========================================
- echo.
- net session >nul 2>&1
- if errorlevel 1 (
- echo [错误] 权限不足,请右键“以管理员身份运行”。
- pause
- exit /b 1
- )
- set "InstallDate="
- set "InstallTime="
- for /f "usebackq tokens=1,2 delims=|" %%a in (`powershell -NoProfile -Command "$ft=[DateTime]::UtcNow.ToFileTimeUtc(); $unix=[uint32](($ft - 116444736000000000) / 10000000); Write-Output ($unix.ToString() + '|' + $ft.ToString())"`) do (
- set "InstallDate=%%a"
- set "InstallTime=%%b"
- )
- if not defined InstallDate (
- echo [错误] 无法计算时间戳(PowerShell 可能不可用)。
- pause
- exit /b 1
- )
- if not defined InstallTime (
- echo [错误] 无法计算 FILETIME。
- pause
- exit /b 1
- )
- echo 将写入(64 位注册表视图):
- echo InstallDate = !InstallDate! ^(REG_DWORD^)
- echo InstallTime = !InstallTime! ^(REG_QWORD^)
- echo.
- set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
- reg add "%RegKey%" /v InstallDate /t REG_DWORD /d !InstallDate! /f /reg:64 >nul
- if errorlevel 1 (
- echo [错误] 写入 InstallDate 失败。
- pause
- exit /b 1
- )
- reg add "%RegKey%" /v InstallTime /t REG_QWORD /d !InstallTime! /f /reg:64 >nul
- if errorlevel 1 (
- echo [错误] 写入 InstallTime 失败。
- pause
- exit /b 1
- )
- :: 读回校验
- set "ReadDate="
- set "ReadTime="
- for /f "tokens=3" %%v in ('reg query "%RegKey%" /v InstallDate /reg:64 2^>nul ^| findstr /i "InstallDate"') do set "ReadDate=%%v"
- for /f "tokens=3" %%v in ('reg query "%RegKey%" /v InstallTime /reg:64 2^>nul ^| findstr /i "InstallTime"') do set "ReadTime=%%v"
- :: REG_QWORD 读回多为十六进制,转十进制再比对
- set "ReadTimeDec="
- if defined ReadTime (
- for /f "usebackq delims=" %%n in (`powershell -NoProfile -Command "try { [uint64]'!ReadTime!'.Trim() } catch { 0 }"`) do set "ReadTimeDec=%%n"
- )
- set "ReadDateDec="
- if defined ReadDate (
- for /f "usebackq delims=" %%n in (`powershell -NoProfile -Command "try { [uint32]'!ReadDate!'.Trim() } catch { 0 }"`) do set "ReadDateDec=%%n"
- )
- if "!ReadDateDec!"=="!InstallDate!" if "!ReadTimeDec!"=="!InstallTime!" (
- echo [成功] 重置成功。
- echo 读回 InstallDate = !ReadDateDec!
- echo 读回 InstallTime = !ReadTimeDec!
- echo.
- pause
- exit /b 0
- )
- echo [警告] 写入后校验不一致。
- echo 期望 InstallDate=!InstallDate! 读回=!ReadDate! ^(!ReadDateDec!^)
- echo 期望 InstallTime=!InstallTime! 读回=!ReadTime! ^(!ReadTimeDec!^)
- echo.
- pause
- exit /b 1
复制代码
成品批处理:
链接:https://pan.quark.cn/s/b53071e04f8c |
|