我的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下载相同的文件,那就太棒了。
答案 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的作者)