我在一系列成功的转换中碰到了这个研究中的单个丢失的226代码。我的ftp命令正在从VBScript调用,但在其他方面与你相似:
ftp -i -n -s:"\path\to\cmdfile.txt" [ftpserver] > "\path\to\stdout.log" 2> "\path\to\stderr.log"
因为-n开关和匿名登录,我的命令文件稍有不同:
USER anonymous
cd [UploadDirectory]
binary
put [file]
quit
正如你提到的, STDERR流总是显示为空 - 即使连接不成功。在我所有的测试中,我从未见过STDERR包含任何信息。 STDOUT,但是,包含一个完整的日志中的事务:
220 Unauthorized access to this server is prohibited. All actions are logged.
USER anonymous
230-Anonmyous Access
230 Login successful.
cd [UploadDirectory]
250 Directory successfully changed.
binary
200 Switching to Binary mode.
put "[file]"
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
1058.3090.82quit
221 Goodbye.
相反管道命令找到,因为在你的例子中,我解析的比赛是在“做的时间stdout文件和99% 226转移完成。“; 1%的时间我只看到
150 Ok to send data
quit
在缺少226的情况下,该文件被成功传输(??)并且完好无损。所有这一切都可以说,尽管不像输出管道那样优雅,解析STDOUT文件应该会给你想要的结果。
我能想到的其他一些项目:
大多数调度/ cron的问题由路径和权限引起的。 MS计划程序包括一个“开始(文件夹)”选项 - 您是否尝试将其设置到批处理文件目录?此外,运行计划作业的用户帐户可能应该在该批处理使用的所有文件和文件夹上被授予显式(未继承)权限。如果批处理从命令行始终如一地工作,但在调度程序上失败,则可能会有更多权限问题,而不仅仅是将调度程序用户帐户添加到管理员组。
你的服务器ftp日志显示什么?我的ftp服务器是vsftpd(Linux),我的服务器日志基本上模仿了重定向捕获的STDOUT流(带有一些附加信息)。这可能会告诉你传输成功代码是否从你的ftp服务器传输过来。
可能不是原因,但考虑使用/ I开关与FIND使其不区分大小写
您是否尝试过使用重定向命令?类似于: ftp ... 2> & 1 |找到...