Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix ftp mget在脚本中使用时不工作_Unix_Batch File_Ftp - Fatal编程技术网

Unix ftp mget在脚本中使用时不工作

Unix ftp mget在脚本中使用时不工作,unix,batch-file,ftp,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_REMOT

我正在尝试使用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目录

...
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>
我查看了很多论坛和其他网站,我看不出有什么理由它会这样做。任何关于为什么这在脚本中不起作用的指针都会很好


谢谢

关闭ftp mget生成的提示的常用选项是

ftp -i

默认情况下,ftp等待脚本中生成的
mget“通配符”
字符串找到的每个文件,并给出提示。

ftp-i
对我有效

按照@jim mcnamara的建议,更改
ftp-s:%SCRIPT\u FILE%%ftp\u HOST%
ftp-si:%SCRIPT\u FILE%%ftp\u HOST%

我在Windows上这样调用脚本:

ftp -i -s:%SCRIPT_FILE% %FTP_HOST%
这是因为
ftp-si:%SCRIPT\u FILE%%ftp\u HOST%
不起作用


我想这是一样的-交换机必须分开。

ftp-I-s:%SCRIPT\u FILE%%ftp\u HOST%
也对我有用

另一个选项是在调用mget之前在ftp脚本中切换提示符(您这样做了),我也在某个地方读了
mget-i

但请注意:
prompt
在ftp脚本中,如果以前关闭过,则会重新打开提示。因此,请使用
ftp-i
提示符
,但不能同时使用两者


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

您确定提示符命令执行正确吗?您使用的是
-s
选项和
%var%
vars,而不是unix的$var?aSome
ftp
客户端有cmd行选项来关闭提示,这就像MarcB提示一样,很可能是问题的根源。好问题,好剧本!祝你好运。@Mark-Yea,提示命令似乎被执行了,因为我没有确认下载的选项@我假设,由于脚本是通过Windows DOS终端运行的,因此变量的形式应该是
%var%
,而不是
$var
,我应该注意到,mget命令的整个输出是立即显示的,没有选择确认每个文件。谢谢Jim。我试过使用你提到的
ftp-I
命令,但也不起作用。我应该在最初的帖子中注意到,
mget
命令的整个输出一次显示出来,而没有选择确认每个文件。这让我觉得有点奇怪,因为它显然能够在列出文件时找到文件,但是
mget
命令本身没有正确执行。