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

如何使用WinSCP批处理文件读取指定文件夹并同步数据?

批处理脚本解决方案:筛选指定文件夹+日期范围同步

一、筛选一级目录下的目标文件夹

要仅处理三位数字命名和data文件夹,需在遍历目录时添加过滤逻辑:

  • 用findstr正则匹配严格三位数字的文件夹(^[0-9][0-9][0-9]$)
  • 单独判断文件夹名是否为data(不区分大小写)

核心过滤代码片段:

for /d %%i in ("%SOURCE_PATH%\*") do (
    :: 匹配三位数字文件夹 或者 data文件夹
    echo %%~nxi | findstr /r "^[0-9][0-9][0-9]$" >nul || if /i "%%~nxi"=="data" (
        :: 后续同步逻辑放在此处
    )
)

二、用日期范围替代DAYS变量

批处理原生处理日期范围较繁琐,可借助PowerShell生成指定区间内的所有日期字符串(格式yyyy-mm-dd),再传递给批处理循环。只需修改起始和结束日期,即可覆盖任意时间区间。

日期范围生成逻辑:

:: 定义你的日期区间
SET START_DATE=2024-05-01
SET END_DATE=2024-05-10

:: 用PowerShell生成日期列表并循环处理
for /f "delims=" %%d in ('powershell -Command "$start = [DateTime]'%START_DATE%'; $end = [DateTime]'%END_DATE%'; for ($dt = $start; $dt -le $end; $dt = $dt.AddDays(1)) { $dt.ToString('yyyy-MM-dd') }"') do (
    :: 对每个日期%%d执行同步操作
)

三、完整修改后的脚本

整合上述逻辑,修正原脚本的路径遍历问题,最终脚本如下:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

SET SOURCE_PATH=Z:\Logs
SET DEST_PATH=/mnt/logs/test

:: 替换为需要的日期区间
SET START_DATE=2024-05-01
SET END_DATE=2024-05-10

:: 遍历日期范围内的每一天
for /f "delims=" %%d in ('powershell -Command "$start = [DateTime]'%START_DATE%'; $end = [DateTime]'%END_DATE%'; for ($dt = $start; $dt -le $end; $dt = $dt.AddDays(1)) { $dt.ToString('yyyy-MM-dd') }"') do (
    :: 遍历源目录下符合条件的文件夹
    for /d %%i in ("%SOURCE_PATH%\*") do (
        :: 筛选三位数字文件夹或data文件夹
        echo %%~nxi | findstr /r "^[0-9][0-9][0-9]$" >nul || if /i "%%~nxi"=="data" (
            :: 执行WinSCP同步操作
            "C:\Program Files (x86)\WinSCP\WinSCP.com" ^
              /log="C:\Users\rjdhld\WinSCP.log" /ini=nul ^
              /command ^
                "open sftp://username:%%21o%%26mH%%24@188.22.1.2/ -hostkey=""ssh-ed29 255 s8HgnuJoit0""" ^
                "option batch continue" ^
                "mkdir %DEST_PATH%/%%~nxi" ^
                "mkdir %DEST_PATH%/%%~nxi/%%d" ^
                "mkdir %DEST_PATH%/%%~nxi/%%d/ping" ^
                "mkdir %DEST_PATH%/%%~nxi/%%d/event" ^
                "option batch abort" ^
                "synchronize remote ""%%~fi\%%d\ping"" ""%DEST_PATH%/%%~nxi/%%d/ping""" ^
                "synchronize remote ""%%~fi\%%d\event"" ""%DEST_PATH%/%%~nxi/%%d/event""" ^
                "exit"
        )
    )
)

set WINSCP_RESULT=%ERRORLEVEL%
if %WINSCP_RESULT% equ 0 (
  echo 同步成功
) else (
  echo 同步失败,错误代码:%WINSCP_RESULT%
)
PAUSE
exit /b %WINSCP_RESULT%

关键说明

  1. 文件夹筛选:通过正则匹配确保只处理三位数字文件夹,if /i实现data文件夹的不区分大小写匹配
  2. 日期范围:借助PowerShell简化日期遍历,只需修改START_DATE和END_DATE即可覆盖任意区间
  3. 路径引号:对可能包含空格的路径添加双引号,避免WinSCP解析出错
  4. 延迟变量扩展:启用SETLOCAL ENABLEDELAYEDEXPANSION确保循环内变量正常解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:50:17