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

WinSCP脚本使用if判断FTP文件存在时执行失败的问题咨询

WinSCP脚本不支持批处理if语句?解决方案看这里

核心问题

WinSCP的原生脚本不支持if、goto、%ERRORLEVEL%这类Windows批处理的控制语法,你写的脚本把WinSCP命令和批处理语法混在一起,导致WinSCP无法识别,执行失败。

两种正确实现方式

方式一:纯WinSCP脚本实现(推荐)

WinSCP自5.12版本起支持原生的if条件语句,也可以用fileexists函数结合get命令实现需求:

写法1:用WinSCP原生if语句

# 自动在错误时终止脚本
option batch abort
# 禁用覆盖确认
option confirm off
# 连接FTP站点
open FTP
# 切换到目标远程文件夹
cd SSISFTP
# 判断文件是否存在并执行下载
if fileexists("FILEONE.txt") then
    get FILEONE.txt
else
    get FILETWO.txt
endif
# 断开连接并退出
close
exit

写法2:用get命令的条件掩码

利用get的-filemask参数实现条件下载,更简洁:

option batch abort
option confirm off
open FTP
cd SSISFTP
# 优先下载FILEONE.txt,不存在则下载FILETWO.txt
get -filemask=">=FILEONE.txt" FILEONE.txt || get FILETWO.txt
close
exit

方式二:批处理+WinSCP脚本结合

如果你的WinSCP版本较低,不支持原生if,可以把逻辑拆分到批处理中,通过WinSCP的退出码判断:

  1. 先创建WinSCP检查脚本(比如命名为check_file.txt):
option batch abort
option confirm off
open FTP
cd SSISFTP
# 检查FILEONE.txt是否存在,存在则返回0,否则返回非0
stat FILEONE.txt
exit
  1. 编写批处理文件(比如download.bat):
@echo off
# 调用检查脚本判断文件是否存在
winscp.com /script=check_file.txt
if %ERRORLEVEL% equ 0 (
    # 文件存在,下载FILEONE.txt
    winscp.com /command "open FTP" "cd SSISFTP" "get FILEONE.txt" "close" "exit"
) else (
    # 文件不存在,下载FILETWO.txt
    winscp.com /command "open FTP" "cd SSISFTP" "get FILETWO.txt" "close" "exit"
)

原脚本失败原因

你之前写的if %ERRORLEVEL% neq 0 goto error是Windows批处理的语法,但直接放在WinSCP脚本里,WinSCP无法识别批处理的环境变量和控制语句,因此执行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:02:46