如何用batch fileftp?

我想要一个batch fileftp到服务器,读出一个文本文件,并断开连接。 服务器需要用户和密码。 我试过了

@echo off pause @ftp example.com username password pause 

但从未login过。 我怎样才能使这个工作?

由0x90h的答案帮了很多…

我把这个文件保存为u.ftp:

 open 10.155.8.215 user password lcd /D "G:\Subfolder\" cd folder/ binary mget file.csv disconnect quit 

然后我运行这个命令:

 ftp -i -s:u.ftp 

它的工作!

非常感谢:)

使用Windows FTP客户端,您将希望使用-s:filename选项来指定FTP客户端运行的脚本。 该文件特别指出,你不应该尝试用<字符input到FTP客户端。

脚本的执行将立即开始,所以它可以用于用户名/密码。

但是,这个设置的安全性是有问题的,因为你现在有一个FTP服务器的用户名和密码,任何决定查看你的batch file的人都可以看到。

无论哪种方式,您都可以从batch file中随时生成脚本文件,然后将其传递到FTP客户端,如下所示:

 @echo off REM Generate the script. Will overwrite any existing temp.txt echo open servername> temp.txt echo username>> temp.txt echo password>> temp.txt echo get %1>> temp.txt echo quit>> temp.txt REM Launch FTP and pass it the script ftp -s:temp.txt REM Clean up. del temp.txt 

服务器名称用户名密码replace为您的详细信息,batch file将以temp.txt生成脚本,然后使用脚本启动ftp,然后删除脚本。

如果您总是获取相同的文件,则可以用文件名replace%1 。 如果不是,则只需启动batch file并提供文件的名称以作为参数。

这是一个老post,但是,一个替代scheme是使用命令选项:

 ftp -n -s:ftpcmd.txt 

-n将禁止初始login,然后文件内容将是:(用您的FTP站点urlreplace127.0.0.1)

 open 127.0.0.1 user myFTPuser myftppassword other commands here... 

这避免了用户/密码分开的行

您需要将ftp命令写入文本文件,并将其作为ftp命令的参数,如下所示:

 ftp -s:filename 

更多信息在这里: http : //www.nsftools.com/tips/MSFTP.htm

我不知道,如果它会用户名和密码提示。

batch file的每一行都会被执行; 但是只有在上一行完成之后。 在你的情况下,一旦命中ftp行,ftp程序将启动并接pipe用户input。 当它closures时,剩下的线路将被执行。 这意味着用户名/密码永远不会被发送到FTP程序,而是一旦closures了ftp程序,就会被送到命令提示符本身。

相反,您需要在ftp命令行上传递所需的所有内容。 就像是:

 @echo off echo user MyUserName> ftpcmd.dat echo MyPassword>> ftpcmd.dat echo bin>> ftpcmd.dat echo put %1>> ftpcmd.dat echo quit>> ftpcmd.dat ftp -n -s:ftpcmd.dat SERVERNAME.COM del ftpcmd.dat 

使用

 ftp -s:FileName 

如Windows XP Professional产品文档中所述 。

您必须指定的文件名代替FileName必须包含要发送到服务器的FTP命令。 其中的命令是

  • 打开Computer [Port]连接到FTP服务器,
  • 用户的用户名[密码] [帐户]与FTP服务器进行authentication,
  • 获取RemoteFile [LocalFile]来检索一个文件,
  • 退出结束FTP会话并终止ftp程序。

更多命令可以在Ftp子命令下find。

这是我使用的。 在我的情况下,某些ftp服务器(pure-ftpd for one)将始终提示input用户名,即使使用-i参数,并将“user username”命令作为交互式密码。 我所做的是在ftp服务器超时之前input一些NOOP(无操作)命令,然后login:

 open ftp.example.com noop noop noop noop noop noop noop noop user username password ... quit 

你也可以使用PowerShell; 这是我做的。 由于我需要下载一个基于模式的文件,我dynamic地创build了一个命令文件,然后让ftp完成其余的工作。

我使用了基本的PowerShell命令。 我不需要下载任何额外的组件。 我首先检查是否存在必要数量的文件。 如果他们用Mget第二次调用FTP。 我从连接到Windows XP远程服务器的Windows Server 2008中运行此操作。

 function make_ftp_command_file($p_file_pattern,$mget_flag) { # This function dynamically prepares the FTP file. # The file needs to be prepared daily because the # pattern changes daily. # PowerShell default encoding is Unicode. # Unicode command files are not compatible with FTP so # we need to make sure we create an ASCII file. write-output "USER" | out-file -filepath C:\fc.txt -encoding ASCII write-output "ftpusername" | out-file -filepath C:\fc.txt -encoding ASCII -Append write-output "password" | out-file -filepath C:\fc.txt -encoding ASCII -Append write-output "ASCII" | out-file -filepath C:\fc.txt -encoding ASCII -Append If ($mget_flag -eq "Y") { write-output "prompt" | out-file -filepath C:\fc.txt -encoding ASCII -Append write-output "mget $p_file_pattern" | out-file -filepath C:\fc.txt -encoding ASCII -Append } else { write-output "ls $p_file_pattern" | out-file -filepath C:\fc.txt -encoding ASCII -Append } write-output quit | out-file -filepath C:\fc.txt -encoding ASCII -Append } ########################### Init Section ############################### $yesterday = (get-date).AddDays(-1) $yesterday_fmt = date $yesterday -format "yyyyMMdd" $file_pattern = "BRAE_GE_*" + $yesterday_fmt + "*.csv" $file_log = $yesterday_fmt + ".log" echo $file_pattern echo $file_log ############################## Main Section ############################ # Change location to folder where the files need to be downloaded cd c:\remotefiles # Dynamically create the FTP Command to get a list of files from # the remote servers echo "Call function that creates a FTP Command " make_ftp_command_file $file_pattern N #echo "Connect to remote site via FTP" # Connect to Remote Server and get file listing ftp -n -v -s:C:\Clover\scripts\fc.txt 10.129.120.31 > C:\logs\$file_log $matches=select-string -pattern "BRAE_GE_[AZ][AZ]*" C:\logs\$file_log # Check if the required number of Files available for download if ($matches.count -eq 36) { # Create the FTP command file # This time the command file has an mget rather than an ls make_ftp_command_file $file_pattern Y # Change directory if not done so cd c:\remotefiles # Invoke ftp with newly created command file ftp -n -v -s:C:\Clover\scripts\fc.txt 10.129.120.31 > C:\logs\$file_log } else { echo "The full set of files is not available" } 

我写了一个脚本作为* .sh文件

 #!/bin/sh set -x FTPHOST='host-address' FTPUSER='ftp-username' FTPPASSWD='yourPass' ftp -n -v $FTPHOST << EOT ascii user $FTPUSER $FTPPASSWD prompt ##Your commands bye EOT 

为我工作得很好