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

批处理脚本开发求助:遍历近5天日期文件夹同步至FTP

解决方案:同步近5天日期命名的文件夹到SFTP

问题分析

原脚本直接同步整个目录,未筛选一级目录中的日期文件夹。我们需要遍历Z:\test\folder1下的一级文件夹,判断其名称是否在近5天日期范围内,再对符合条件的文件夹单独同步。

修改后的脚本

@echo off
setlocal enabledelayedexpansion

REM 获取当前日期(YYYY-MM-DD格式)
set "TIMESTAMP=%date:~10,4%-%date:~7,2%-%date:~4,2%"

REM 获取5天前的日期(YYYY-MM-DD格式)
set day=-5
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^&"-"^&right(100+month(s),2)^&"-"^&right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "pre_date=%%a"
del "%temp%\%~n0.vbs"

REM 定义本地根目录和SFTP目标根目录
set "LOCAL_ROOT=Z:\test\folder1"
set "SFTP_ROOT=/mnt/logs/test"

REM 遍历本地根目录下的一级文件夹
for /d %%d in ("%LOCAL_ROOT%\*") do (
    set "FOLDER_NAME=%%~nxd"
    REM 判断文件夹名称是否为YYYY-MM-DD格式,且日期在pre_date到TIMESTAMP之间
    echo !FOLDER_NAME! | findstr /r "^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$" >nul
    if not errorlevel 1 (
        if "!FOLDER_NAME!" geq "!pre_date!" if "!FOLDER_NAME!" leq "!TIMESTAMP!" (
            echo 正在同步文件夹: !FOLDER_NAME!
            REM 同步当前日期文件夹到SFTP对应路径
            "C:\Program Files (x86)\WinSCP\WinSCP.com" ^
              /log="C:\Users\testuser\Desktop\batch\WinSCP.log" /ini=nul ^
              /command ^
                "open sftp://team:O%%l%%24og3@187.121.11.25/ -hostkey=""ssh-ed25519 256 f0pa/Fxg81I0Wjo=""" ^
                "synchronize remote ""%%d"" ""%SFTP_ROOT%/!FOLDER_NAME!""" ^
                "exit"
            
            set "WINSCP_RESULT=!ERRORLEVEL!"
            if !WINSCP_RESULT! equ 0 (
                echo 同步成功: !FOLDER_NAME!
            ) else (
                echo 同步失败: !FOLDER_NAME!,错误码: !WINSCP_RESULT!
            )
        )
    )
)

PAUSE
exit /b %WINSCP_RESULT%

关键修改点说明

  • 启用延迟变量扩展:添加setlocal enabledelayedexpansion,确保循环内的变量(如FOLDER_NAME)能正确更新。
  • 日期格式验证:用findstr正则表达式筛选符合YYYY-MM-DD格式的文件夹,避免非日期命名的目录被误处理。
  • 日期范围判断:利用YYYY-MM-DD格式的字符串可直接按字典序比较的特性,判断文件夹日期是否在近5天范围内。
  • 逐个同步文件夹:对每个符合条件的文件夹,单独执行WinSCP同步命令,将本地文件夹同步到SFTP对应路径(/mnt/logs/test/[日期文件夹名])。

注意事项

  1. 确保网络驱动器Z:已正常挂载,且Z:\test\folder1下的日期文件夹名称严格为YYYY-MM-DD格式。
  2. WinSCP日志会记录所有同步操作,可通过日志排查同步失败的具体原因。
  3. 若需要同步多个日期文件夹,脚本会逐个处理,每个文件夹的同步结果会单独输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:12:03