批处理实现每日公司FTP自动下载遇阻 参考WinSCP方案仍未成功
自动化FTP每日下载脚本的实现问题与修正
原编写的批处理脚本无法达成预期效果,核心原因是把不同工具的命令语法完全混写,具体错误拆解:
- 首行逻辑完全无效:
open wget --user=USERNAME --password=PASSWORD FTP://000.00.0.0不符合任何FTP工具的调用规则。如果使用Windows系统自带的ftp交互命令,open后仅需填写服务器地址,不能直接夹带wget参数、账号密码;如果直接调用wget工具,根本不需要前置open命令 - FTP路径切换语法错误:
cd/company/file缺少路径前的空格,正确写法应为cd /company/file - 命令无逻辑拼接:
get *.* forfiles /D+0把FTP的下载命令和Windows本地的日期筛选命令直接硬拼,forfiles是本地系统命令,无法作为FTP下载的内置筛选参数生效 - 操作方向完全反向:
put C:\loads\path是向FTP服务器上传本地文件的命令,和“从FTP下载文件到本地”的核心需求相悖
可直接落地的实现方案
方案1:纯wget批处理实现
无需进入FTP交互模式,直接把wget参数写入批处理即可完成每日下载:
wget --user=实际FTP账号 --password=实际FTP密码 --directory-prefix=C:\loads\path ftp://000.00.0.0/company/file/*.* pause
参数说明:
--directory-prefix直接指定本地文件的存储目录,wget会自动匹配路径结构- wget自带的更新检测机制会自动跳过未变更的旧文件,仅下载当日新增/更新的内容,无需额外拼接日期筛选逻辑
方案2:WinSCP正确实现(此前尝试失败多为脚本格式错误)
WinSCP无法直接把FTP操作命令拼在启动参数里,需要拆分脚本和启动逻辑:
- 新建纯文本脚本文件
ftp_auto_download.txt,写入交互逻辑:
其中open ftp://账号:密码@000.00.0.0 cd /company/file get *.* >=1D exit>=1D是WinSCP内置的日期筛选规则,自动拉取最近1天修改的文件,匹配每日下载的需求 - 新建启动批处理,调用WinSCP加载脚本执行:
"C:\Program Files (x86)\WinSCP\WinSCP.com" /script=ftp_auto_download.txt pause
内容的提问来源于stack exchange,提问作者Rafael Felipe Santos
相关产品推荐
相关产品推荐

