You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助:实现文件夹修改时间对比判断功能

批处理实现文件夹修改时间超时判断

以下提供两种实现方案,核心逻辑是将文件夹修改时间与当前时间转换为可计算的数值,对比时间差是否超过4小时(14400秒),输出对应结果。

方案一:通用可靠版(不受系统区域格式影响)

使用wmic命令获取标准格式的时间,避免不同系统区域时间格式差异导致的解析错误:

@echo off
setlocal enabledelayedexpansion

:: 配置要检测的文件夹路径
set "targetFolder=C:\Program Files"

:: 获取当前系统时间的标准格式,转换为时间戳字符串(YYYYMMDDHHMMSS)
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set "currentTimeRaw=%%a"
set "currentTimestamp=!currentTimeRaw:~0,4!!currentTimeRaw:~4,2!!currentTimeRaw:~6,2!!currentTimeRaw:~8,2!!currentTimeRaw:~10,2!!currentTimeRaw:~12,2!"
:: 转换为总秒数
call :convertToSeconds !currentTimestamp! currentTotalSec

:: 获取目标文件夹的最后修改时间,转换为时间戳字符串
for /f "tokens=2 delims==" %%a in ('wmic folder where "name='%targetFolder:\=\\%'" get lastmodified /value') do set "modTimeRaw=%%a"
set "modTimestamp=!modTimeRaw:~0,4!!modTimeRaw:~4,2!!modTimeRaw:~6,2!!modTimeRaw:~8,2!!modTimeRaw:~10,2!!modTimeRaw:~12,2!"
:: 转换为总秒数
call :convertToSeconds !modTimestamp! modTotalSec

:: 计算时间差(秒),4小时对应14400秒
set /a timeDiff=currentTotalSec - modTotalSec

:: 判断并输出结果
if !timeDiff! gtr 14400 (
    echo 1
) else (
    echo 0
)

endlocal
exit /b

:: 子函数:将YYYYMMDDHHMMSS格式的时间转换为总秒数(简化处理,不考虑闰年,需精确可自行调整)
:convertToSeconds
set "timeStr=%~1"
:: 拆分年、月、日、时、分、秒
set "year=!timeStr:~0,4!"
set "month=!timeStr:~4,2!"
set "day=!timeStr:~6,2!"
set "hour=!timeStr:~8,2!"
set "minute=!timeStr:~10,2!"
set "second=!timeStr:~12,2!"

:: 计算到当月的总天数
set "monthDays=31 28 31 30 31 30 31 31 30 31 30 31"
set /a totalDays=0
set "count=1"
for %%m in (%monthDays%) do (
    if !count! lss !month! set /a totalDays+=%%m
    set /a count+=1
)
set /a totalDays+=day-1

:: 转换为总秒数
set /a totalSec=year*365*86400 + totalDays*86400 + hour*3600 + minute*60 + second
set "%~2=!totalSec!"
exit /b

方案二:基于你提供的命令(依赖系统区域时间格式)

如果必须使用FOR %A IN ("C:\Program Files") DO @ECHO=%~tA获取修改时间,需适配系统的时间格式(示例针对中文系统的yyyy/MM/dd HH:mm格式):

@echo off
setlocal enabledelayedexpansion

set "targetFolder=C:\Program Files"

:: 获取当前系统的日期和时间
for /f "tokens=1" %%a in ('date /t') do set "currentDate=%%a"
for /f "tokens=1" %%a in ('time /t') do set "currentTime=%%a"
set "currentFullTime=!currentDate! !currentTime!"

:: 获取目标文件夹的修改时间
for %%A in ("%targetFolder%") do set "modFullTime=%%~tA"

:: 将时间转换为总秒数
call :timeToSec "!currentFullTime!" currentSec
call :timeToSec "!modFullTime!" modSec

:: 计算时间差并判断
set /a diff=currentSec - modSec
if !diff! gtr 14400 (
    echo 1
) else (
    echo 0
)

endlocal
exit /b

:: 子函数:将"yyyy/MM/dd HH:mm"格式转换为总秒数
:timeToSec
set "timeStr=%~1"
:: 拆分日期和时间部分
for /f "tokens=1-2 delims= " %%a in ("!timeStr!") do (
    set "datePart=%%a"
    set "timePart=%%b"
)
:: 拆分年、月、日
for /f "tokens=1-3 delims=/" %%a in ("!datePart!") do (
    set "y=%%a"
    set "m=%%b"
    set "d=%%c"
)
:: 拆分时、分
for /f "tokens=1-2 delims=:" %%a in ("!timePart!") do (
    set "h=%%a"
    set "mi=%%b"
)

:: 计算总天数(简化版,不考虑闰年)
set "monthDays=31 28 31 30 31 30 31 31 30 31 30 31"
set /a totalDays=0
set "cnt=1"
for %%md in (!monthDays!) do (
    if !cnt! lss !m! set /a totalDays+=%%md
    set /a cnt+=1
)
set /a totalDays+=d-1

:: 转换为总秒数
set /a totalSec=y*365*86400 + totalDays*86400 + h*3600 + mi*60
set "%~2=!totalSec!"
exit /b

注意:方案二仅适配特定区域的时间格式,若系统是英文环境(时间格式为MM/dd/yyyy HH:mm),需要修改子函数中的日期拆分逻辑。

内容的提问来源于stack exchange,提问作者kyrs161

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:45:04