使用WinSCP+任务计划程序SFTP传输时遇"Unknown command"错误
WinSCP脚本执行报错:Unknown command 'directory' 解决方法
问题场景
通过Windows任务计划程序搭配WinSCP实现.xlsx文件的SFTP自动传输,WinSCP能正常启动并完成身份验证,但随即报错断开连接,日志提示Unknown command 'directory'。
错误日志
< 2023-04-03 19:44:36.835 Script: Active session: [1] [redacted] > 2023-04-03 19:44:36.835 Script: directory of / < 2023-04-03 19:44:36.835 Script: Unknown command 'directory'. . 2023-04-03 19:44:36.836 Script: Failed . 2023-04-03 19:44:36.837 Script: Exit code: 1 . 2023-04-03 19:44:36.837 Closing connection.
任务计划程序启动参数
/script:C:[redacted]Script.txt /log:C:[redacted]Log.txt
现有WinSCP脚本内容
# 使用提供的用户名和密码连接SFTP服务器 open sftp://username:password@[redacted] # 将指定本地路径中的TB文件上传至根目录/ # -nopreservetime = 忽略WinSCP关于文件时间戳记录的错误 # -resumesupport=off = 禁用文件分段扩展,确保WinSCP完整传输文件 # -delete = 文件发送后清空本地目录,因后续TB文件会替代旧文件 put C:[redacted]\*.xlsx / -nopreservetime -resumesupport=off
问题原因及解决方法
原因分析
日志中出现的directory of /并非你编写的脚本命令,大概率是WinSCP图形界面的残留会话配置导致:比如你之前编辑该SFTP会话时,设置了"连接后自动执行的命令",误写了directory(WinSCP脚本中合法的目录查看命令是ls),或者任务计划调用时触发了图形界面的自动行为。
解决步骤
清理会话的自动执行命令
打开WinSCP,找到对应的SFTP会话,右键选择「编辑」,切换到「选项」标签页,检查「连接后」是否存在directory相关命令,删除该命令或替换为ls /。优化脚本确保无交互执行
在脚本开头添加命令关闭交互提示,同时补全注释中提到但未添加的-delete参数,最后添加exit确保脚本执行完成后正常退出:option batch on option confirm off open sftp://username:password@[redacted] put C:[redacted]\*.xlsx / -nopreservetime -resumesupport=off -delete exit确认任务计划的执行模式
确保任务计划中WinSCP的启动参数仅包含/script和/log,不要添加可能触发图形界面的参数,同时执行账户需拥有本地文件访问权限和WinSCP执行权限。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

