求助:编写批处理文件比较文件日期并触发robocopy复制
批量文件日期对比与自动复制方案
核心思路
通过wmic命令精准获取文件的最后修改时间,转换为可直接对比的数字格式(YYYYMMDDHHMMSS),避免dir命令因系统区域格式差异导致的识别错误,再根据时间对比结果触发robocopy复制操作。
完整批处理代码
@echo off setlocal enabledelayedexpansion :: 定义目标文件路径 set "file1=C:\usr\File1" set "file2=C:\temp\File2" :: 前置检查:文件是否存在 if not exist "%file1%" ( echo 错误:File1不存在于C:\usr路径下 pause exit /b 1 ) if not exist "%file2%" ( echo 错误:File2不存在于C:\temp路径下 pause exit /b 1 ) :: 提取并转换File1的最后修改时间为YYYYMMDDHHMMSS格式 for /f "skip=1 tokens=1" %%a in ('wmic datafile where name^="%file1:\=\\%" get lastmodified') do ( if not "%%a"=="" set "time1=%%a" ) set "time1=!time1:~0,4!!time1:~4,2!!time1:~6,2!!time1:~8,2!!time1:~10,2!!time1:~12,2!" :: 提取并转换File2的最后修改时间为YYYYMMDDHHMMSS格式 for /f "skip=1 tokens=1" %%a in ('wmic datafile where name^="%file2:\=\\%" get lastmodified') do ( if not "%%a"=="" set "time2=%%a" ) set "time2=!time2:~0,4!!time2:~4,2!!time2:~6,2!!time2:~8,2!!time2:~10,2!!time2:~12,2!" :: 时间对比并执行复制 if !time2! gtr !time1! ( echo File2更新,启动robocopy复制... robocopy "C:\temp" "C:\usr" "File2" /XO /NFL /NDL /NJH /NJS echo 复制完成 ) else ( echo File2未更新,无需执行复制 ) endlocal pause
关键细节说明
wmic datafile命令返回的时间格式为标准UTC格式,不受系统区域设置影响,解决了dir命令因日期格式差异导致的识别问题- 路径中的反斜杠需转换为双反斜杠(
\→\\),这是wmic命令的路径格式要求 enabledelayedexpansion用于确保循环内的变量能即时更新,避免取值错误- robocopy参数说明:
/XO:仅复制比目标文件新的文件/NFL//NDL//NJH//NJS:关闭文件列表、目录列表、作业头、作业摘要输出,简化控制台信息
内容的提问来源于stack exchange,提问作者Todd G
相关产品推荐
相关产品推荐

