我的代码坏了吗? Windows下的Ftp脚本

时间:2012-05-16 03:55:54

标签: windows ftp batch-file windows-server-2003

我写了一些ftp文件从服务器到本地机器的脚本。在不同模式下,脚本具有不同的行为。

如果我以交互方式运行它,ftp就可以了:

ftp> mget *abc*.reviewed
200 Type set to A.
200 PORT command successful.
150 Opening ASCII mode data connection for xxx_abc_yyyymmdd.reviewed(506 bytes).
226 Transfer complete.
ftp: 506 bytes received in 0.00Seconds 506000.00Kbytes/sec.

如果我在Windows任务计划程序中安排它,它只显示以下内容:

ftp> mget *abc*.reviewed
200 Type set to A.

我怀疑发生了错误,但没有记录。我能做错什么?

我的代码示例:

call :Logic > E:\ftp_%yyyymmdd%.log 2>&1 
exit /b 0
:Logic
ftp -i -s:C:\App\XXX\bin\ftp_script.txt some.host.net 

我将输出变为日志文件,但我不知道错误流是否已成功配置。我可能会丢失一些错误日志。

ftp_script.txt的内容:

username
password
lcd E:\YYY
cd /XXX/YYY/ZZZ
mget *abc*.reviewed
mget *bcd*.reviewed
mget *cde*.reviewed
bye

进一步的案例研究:

该脚本计划于每天晚上8点运行。我今天检查了服务器,发现目标服务器包含我想要的文件,最后修改属性为下午6:54。因此该文件应该在晚上8点出现,并且在昨天的日程安排中它们不是ftp。

我假设最后修改的属性等于它被复制的时间(从其他目录)或重命名(该文件应该从.csv重命名为.reviewed)。

我在下午12:40安排了一个关闭任务来运行脚本,文件从目标服务器成功ftp到本地服务器。

实在令人困惑。

1 个答案:

答案 0 :(得分:0)

防火墙在主动FTP模式下拒绝连接可能有问题,您可能会尝试设置被动模式发出PASV命令( QUOTE PASV 与Windows ftp.exe)并查看是否修复了问题(关于两种不同模式的更多细节here)。
我还建议您设置debug以便从服务器获取详细信息(添加DEBUG命令) 如果您不传输文本,请记住也包括BINARY命令。