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

