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

如何编写Windows脚本修改当日文件夹时间并通过Task Scheduler每日午夜执行?

实现每日更新当日文件夹修改时间的Windows脚本

需求说明

编写Windows脚本,每日午夜通过任务计划程序运行,筛选出当日修改的文件夹,将其修改时间更新为脚本运行的时间,不改动更早的文件夹。

示例场景

  • 源文件夹状态:

    • M:\Test\Folder.1 2024-03-01 16:01
    • M:\Test\Folder.2 2024-03-02 16:01
    • M:\Test\Folder.3 2024-03-03 16:01
    • M:\Test\Folder.4 2024-03-04 16:01
    • M:\Test\Folder.5 2024-03-05 16:01
    • M:\Test\Folder.6 2024-03-06 16:01
    • M:\Test\Folder.7 2024-03-07 16:01
    • M:\Test\Folder.8 2024-03-07 16:01
    • M:\Test\Folder.9 2024-03-07 16:01
  • 2024-03-07 23:59运行脚本后目标状态:

    • M:\Test\Folder.1 2024-03-01 16:01
    • M:\Test\Folder.2 2024-03-02 16:01
    • M:\Test\Folder.3 2024-03-03 16:01
    • M:\Test\Folder.4 2024-03-04 16:01
    • M:\Test\Folder.5 2024-03-05 16:01
    • M:\Test\Folder.6 2024-03-06 16:01
    • M:\Test\Folder.7 2024-03-07 23:59
    • M:\Test\Folder.8 2024-03-07 23:59
    • M:\Test\Folder.9 2024-03-07 23:59

方案1:PowerShell脚本(推荐,灵活易维护)

PowerShell可直接处理日期筛选和文件属性修改,脚本如下:

# 目标文件夹路径,可根据实际修改
$targetPath = "M:\Test"
# 获取当日0点整的时间戳
$todayStart = Get-Date -Hour 0 -Minute 0 -Second 0
# 获取脚本运行时的当前时间
$currentTime = Get-Date

# 筛选当日修改的文件夹并更新时间
Get-ChildItem -Path $targetPath -Directory | Where-Object {
    $_.LastWriteTime -ge $todayStart
} | ForEach-Object {
    # 更新文件夹的修改、创建、访问时间为当前时间
    $_.LastWriteTime = $currentTime
    $_.CreationTime = $currentTime
    $_.LastAccessTime = $currentTime
    Write-Host "已更新: $($_.FullName) -> $currentTime"
}

任务计划程序配置步骤

  1. 打开「任务计划程序」,点击「创建基本任务」
  2. 填写任务名称(如“更新当日文件夹时间”),点击下一步
  3. 触发器选择「每天」,设置触发时间为23:59,点击下一步
  4. 操作选择「启动程序」,点击下一步
  5. 程序/脚本填写:powershell.exe
  6. 添加参数填写:-ExecutionPolicy Bypass -File "C:\Scripts\UpdateFolderTime.ps1"(替换为你的脚本实际存储路径)
  7. 完成创建后,右键任务→属性→勾选「使用最高权限运行」,避免权限问题

方案2:批处理脚本(兼容Windows旧系统)

通过forfiles筛选当日文件夹,结合robocopy修改时间(均为Windows自带工具):

@echo off
setlocal enabledelayedexpansion

:: 目标文件夹路径,可根据实际修改
set "targetPath=M:\Test"
:: 获取当日日期(格式适配系统区域设置,若你的系统日期为DD/MM/YYYY,需调整变量顺序)
for /f "tokens=1-3 delims=/" %%a in ('echo %date%') do set "today=%%c-%%a-%%b"

:: 导出当日修改的文件夹路径到临时文件
forfiles /p "%targetPath%" /d +%today% /c "cmd /c if @isdir==TRUE echo @path" > temp_folder_list.txt

:: 逐个更新文件夹时间
for /f "delims=" %%i in (temp_folder_list.txt) do (
    :: 创建临时空文件夹,通过robocopy镜像同步修改目标文件夹时间
    mkdir "temp_empty_dir"
    robocopy "temp_empty_dir" "%%i" /mir /xj >nul
    rmdir "temp_empty_dir"
    echo 已更新: %%i
)

del temp_folder_list.txt
endlocal

注意事项

  • 批处理的日期格式依赖系统区域设置,若你的系统日期显示格式不是MM/DD/YYYY,需调整for /f中的变量顺序
  • 任务计划程序配置同PowerShell方案,直接选择批处理文件作为启动程序即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:13:14