批处理脚本等待在FTP服务器上生成文件并下载

时间:2013-08-22 03:16:06

标签: file batch-file ftp sftp

我的FTP服务器中有一个程序来生成一个文件,可能需要3-5分钟才能完成,而且我也知道我的程序创建的文件的名称。现在,一旦我在服务器中启动程序,我就会继续检查,直到创建文件。一旦创建,我使用下面的批处理脚本将文件ftp到我的本地桌面。

@ftp -i -s:"%~f0"&GOTO:EOF
open 10.100.16.111 
username
password
lcd c:\
cd  root/output_folder
binary
mget "*partial_file_name*" REM mget using wildcard search
disconnect
bye

这个脚本对我来说很好。但问题是,我需要修改这个脚本,脚本应该继续运行,直到生成文件。因为我不知道文件创建何时完成。所以,如果有人帮助/指导我制作一个循环脚本,等待文件创建完成并通过FTP下载相同的文件,那就太棒了。

2 个答案:

答案 0 :(得分:2)

通过此编辑,您可以在命令行上启动带有文件名的批处理文件,如下所示:

ftpscript.bat "filename.ext"

请注意, lcd 使用c:\,这是Windows更高版本中的受限制位置。

@echo off
 >file.tmp echo open 10.100.16.111 
>>file.tmp echo username
>>file.tmp echo password
>>file.tmp echo lcd c:\
>>file.tmp echo cd  root/output_folder
>>file.tmp echo binary
>>file.tmp echo mget "%~1"
>>file.tmp echo disconnect
>>file.tmp echo bye

:retry
ftp -i -s:"file.tmp"
if not exist "%~1" timeout /t 300 & goto :retry
echo file has downloaded
del file.tmp
pause

答案 1 :(得分:0)

更优雅的解决方案是在命令行上使用支持参数化脚本或命令的FTP客户端,例如WinSCP,以避免创建临时脚本文件。

参数化脚本

批处理文件与Windows ftp

或多或少相同
@echo off
:retry
winscp.com /script=script.txt /parameter "%~1"
if not exist "%~1" timeout /t 300 & goto :retry
echo file has downloaded
pause

The ftp script converts to following WinSCP script

open ftp://username:password@10.100.16.111/
lcd c:\
cd root/output_folder
get -transfer=binary "%1%"
exit

命令行上的命令

您还可以将命令内联到批处理文件中:

@echo off
:retry
winscp.com /command ^
    "open ftp://username:password@10.100.16.111/" ^
    "lcd c:\" ^
    "cd root/output_folder" ^
    "get -transfer=binary ""%~1""" ^
    "exit"
if not exist "%~1" timeout /t 300 & goto :retry
echo file has downloaded
pause

参考文献:

如果您需要升级到FTPS或SFTP,只需相应地修改session URL命令中的open command

(我是WinSCP的作者)