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

FTP批处理脚本优化:实现单文件循环下载与归档

单文件循环处理的FTP脚本优化方案

针对原脚本批量操作导致的新文件误归档问题,以下两种优化方案实现下载单个PDF后立即归档,循环执行直至无文件可处理时退出。

方案一:WinSCP内置循环(高效推荐)

此方案仅建立一次FTP连接,通过WinSCP的文件掩码和脚本循环实现单文件处理,效率更高。

步骤1:创建WinSCP脚本文件

新建文本文件命名为process_files.txt,写入以下内容:

open ftp://xxxxx:xxxxxxx@xxxxxx/file/file1/ -passive=0
binary
:loop
:: 仅下载第一个匹配的PDF文件
get *.pdf|1 \\xxxxxxxx\xxxxxxx\xxxxxx\xxxxxxxx\
:: 下载失败(无文件)则退出循环
if errorlevel 1 goto exit_loop
:: 仅移动第一个匹配的PDF文件到归档目录
mv *.pdf|1 /xxxxxx/file1/archive/
:: 回到循环继续处理下一个文件
goto loop
:exit_loop
close
exit

步骤2:编写批处理调用脚本

新建批处理文件,写入以下内容:

@echo off
set "WINSCP_PATH=C:\Program Files (x86)\WinSCP\WinSCP.com"
"%WINSCP_PATH%" /ini=nul /script=process_files.txt

方案二:批处理循环调用WinSCP

此方案通过批处理捕获文件列表,逐个调用WinSCP处理,适合需要更灵活控制的场景。

@echo off
setlocal enabledelayedexpansion

:: 配置参数
set "WINSCP_PATH=C:\Program Files (x86)\WinSCP\WinSCP.com"
set "FTP_URL=ftp://xxxxx:xxxxxxx@xxxxxx/file/file1/"
set "LOCAL_DIR=\\xxxxxxxx\xxxxxxx\xxxxxx\xxxxxxxx\"
set "ARCHIVE_DIR=/xxxxxx/file1/archive/"

:LOOP
:: 获取服务器PDF文件列表到临时文件
"%WINSCP_PATH%" /ini=nul /command ^
    "open %FTP_URL% -passive=0" ^
    "binary" ^
    "ls *.pdf" ^
    "exit" > winscp_temp.txt

:: 提取第一个PDF文件名(跳过ls输出的表头和空行)
set "TARGET_FILE="
for /f "skip=4 tokens=*" %%a in (winscp_temp.txt) do (
    set "LINE=%%a"
    :: 从ls输出中拆分出文件名(适配标准FTP ls格式:日期 时间 大小 文件名)
    for /f "tokens=1,2,3,4,*" %%b in ("!LINE!") do set "TARGET_FILE=%%f"
    if not "!TARGET_FILE!"=="" goto PROCESS
)

:: 无文件可处理,清理后退出
del winscp_temp.txt
echo 无PDF文件可处理,脚本退出。
exit /b

:PROCESS
echo 正在处理文件:!TARGET_FILE!
:: 下载单个文件
"%WINSCP_PATH%" /ini=nul /command ^
    "open %FTP_URL% -passive=0" ^
    "binary" ^
    "get ""!TARGET_FILE!"" ""%LOCAL_DIR%""" ^
    "exit"

:: 移动单个文件到归档
"%WINSCP_PATH%" /ini=nul /command ^
    "open %FTP_URL% -passive=0" ^
    "mv ""!TARGET_FILE!"" ""%ARCHIVE_DIR%""" ^
    "exit"

:: 清理临时文件,继续循环
del winscp_temp.txt
goto LOOP

关键说明

  • 替换所有占位符(如FTP地址、本地/归档目录)为实际业务值
  • 方案一的|1是WinSCP文件掩码语法,限制仅匹配第一个文件,确保下载和归档的是同一文件
  • 方案二需根据FTP服务器的ls输出格式调整文件名提取逻辑,若格式特殊可修改for循环的拆分规则
  • 测试时可开启@echo on查看执行细节,排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:37:02