2

我的 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 下载相同的文件,那就太好了。

4

2 回答 2

2

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

ftpscript.bat "filename.ext"

请注意,您的液晶显示器使用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
于 2013-08-22T06:27:25.227 回答
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

ftp脚本转换为以下 WinSCP 脚本

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,只需相应地修改命令命令中的会话 URLopen

(我是WinSCP的作者)

于 2014-11-19T10:49:55.617 回答