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

批处理脚本获取文件名中间日期,实现robocopy每日文件复制

如何提取文件名中的日期部分,用robocopy复制当日生成的文件?

嘿,这个问题我刚好处理过!针对你说的文件名格式——小时_日期_用户名_计算机名(比如8-05-21_09-05-2019_wolverine_WCALL1-010),我们可以用批处理的字符串拆分功能精准提取日期,再结合系统日期筛选出当日文件,完美适配robocopy的需求。

第一步:提取单个文件名的日期部分

文件名用下划线分隔,日期是第二个分段。我们可以用for /f命令按下划线拆分字符串:

:: 示例文件名
set "filename=8-05-21_09-05-2019_wolverine_WCALL1-010"
:: 拆分并提取第二个分段(日期)
for /f "tokens=2 delims=_" %%a in ("%filename%") do set "file_date=%%a"
:: 此时file_date的值就是09-05-2019

第二步:获取系统当前日期(匹配文件名格式)

批处理的%date%变量格式会随系统区域设置变化,假设你的系统日期是MM/dd/yyyy(比如09/05/2019),我们需要把它转换成和文件名一致的MM-dd-yyyy格式:

for /f "tokens=1-3 delims=/" %%a in ("%date%") do set "current_date=%%a-%%b-%%c"

如果你的系统日期是dd/MM/yyyy(比如05/09/2019),只需要调整tokens的顺序:

for /f "tokens=1-3 delims=/" %%a in ("%date%") do set "current_date=%%b-%%a-%%c"

第三步:完整的批处理脚本(自动筛选并复制当日文件)

把上面的逻辑整合起来,遍历目录下所有符合格式的文件,对比日期后调用robocopy:

@echo off
setlocal enabledelayedexpansion

:: 调整这里的日期格式转换逻辑,匹配你的系统区域
for /f "tokens=1-3 delims=/" %%a in ("%date%") do set "current_date=%%a-%%b-%%c"

:: 遍历本地目录下所有符合"_分隔四段"格式的文件
for %%f in (*_*_*_*) do (
    :: 提取当前文件的日期部分
    for /f "tokens=2 delims=_" %%d in ("%%~nf") do set "file_date=%%d"
    :: 对比日期,匹配则执行复制
    if "!file_date!"=="%current_date%" (
        :: robocopy语法:robocopy 源文件路径 目标目录 文件名
        robocopy "%%~dp." "\\server\files" "%%~nf"
        echo 已成功复制:%%~nf
    )
)

endlocal

小提示:%%~dp.表示当前脚本所在的本地目录(你可以替换成实际的文件目录),%%~nf是不带扩展名的文件名,启用enabledelayedexpansion是为了在循环中实时读取变量值。

备选方案:用robocopy的/maxage参数(依赖文件修改时间)

如果文件的修改时间和文件名中的生成日期完全一致,也可以直接用robocopy自带的参数简化操作:

robocopy "本地文件目录" "\\server\files" /maxage:1

/maxage:1表示复制1天内修改过的文件,但这个方法依赖文件修改时间的准确性,不如提取文件名日期的方法精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:24:09