ftp mget在脚本中使用时不起作用

时间:2013-01-23 19:06:44

标签: unix batch-file ftp

我正在尝试使用MS DOS ftp脚本(Windows 7)从Unix机器获取大量文件。我是新手,所以我一直在尝试修改一个在线示例。代码如下:

@echo off
SETLOCAL

REM ##################################
REM Change these parameters
set FTP_HOST=host
set FTP_USER=user
set FTP_REMOTE_DIR=/users/myAcc/logFiles
set FTP_REMOTE_FILE=*.log
set FTP_LOCAL_DIR=C:\Temp
set FTP_TRANSFER_MODE=ascii
REM ##################################
set FTP_PASSWD=password

set SCRIPT_FILE=%TEMP%\ftp.txt
(
    echo %FTP_USER%
    echo %FTP_PASSWD%
    echo %FTP_TRANSFER_MODE%
    echo lcd %FTP_LOCAL_DIR%
    echo cd  %FTP_REMOTE_DIR%
    echo prompt
    echo mget %FTP_REMOTE_FILE%
) > %SCRIPT_FILE%

ftp -s:%SCRIPT_FILE% %FTP_HOST%
del %SCRIPT_FILE%

ENDLOCAL

但是,当我运行它时,mget命令失败并给出以下输出:

注意:脚本其余部分的输出显示所有前面的步骤都按预期工作。我甚至添加了ls命令来验证脚本是否在正确的目录中。

...
ftp> mget *.log
200 Type set to A; form set to N.
mget logFile1_SystemOut_22-01-13.log? mget logFile2_SystemOut_22-01-13.log? mget 
logFile3_SystemOut_22-01-13.log? ftp>

我已经完成了手动重复完全相同的步骤,它运行正常 - 没有问题,文件已成功传输到C:\ Temp目录。

我检查了很多论坛和其他网站,我看不出有什么理由说它应该像这样。关于为什么这在脚本中不起作用的任何指针都会很棒!

由于

3 个答案:

答案 0 :(得分:1)

我在Windows上调用脚本,如下所示:

ftp -i -s:%SCRIPT_FILE% %FTP_HOST%

这是因为ftp -si:%SCRIPT_FILE% %FTP_HOST%无效。

我想它在上是一样的 - 交换机必须分开。

答案 1 :(得分:0)

ftp -i为我工作。

在@jim mcnamara建议的脚本中更改ftp -s:%SCRIPT_FILE% %FTP_HOST%的{​​{1}}。

答案 2 :(得分:0)

ftp -i -s:%SCRIPT_FILE% %FTP_HOST%也为我工作。

另一种选择是在你调用mget(你这样做)之前在ftp脚本中切换提示,并且我也在某处读过mget -i

但请注意:如果之前已关闭,则ftp脚本中的prompt会将提示重新打开。所以使用ftp -iprompt,但不要同时使用两者!

你可以通过在mget之后在ftp脚本中回显一些y来检查你的脚本是否正常工作,所以当它们出现时它会对提示回答是。