如何使用批处理文件FTP?(How to ftp with a batch file?)

2019-08-31 20:42发布

我想一个批处理文件到FTP到服务器,读出一个文本文件,然后断开。 服务器需要用户名和密码。 我试过了

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

但它从来没有登录。 我怎样才能得到这个工作?

Answer 1:

通过回答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

和它的工作!

感谢很多人:)



Answer 2:

使用你想使用Windows FTP客户端-s:filename选项指定脚本的FTP客户端来运行。 该文件明确指出,你不应该试图管道输入到FTP客户端与<字符。

脚本的执行将立即启动,所以它的用户名/密码工作。

然而,这种设置的安全性是值得怀疑的,因为你现在的FTP服务器的任何人看到谁决定看看你的批处理文件中的用户名和密码。

无论哪种方式,您可以从批处理文件动态生成的脚本文件,然后把它传递到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

用您的详细信息替换服务器名用户名密码 ,该批处理文件将生成脚本,该脚本TEMP.TXT启动FTP,然后删除该脚本。

如果你总是得到相同的文件,你可以替换%1的文件名。 如果没有,你只是启动批处理文件,并提供该文件的名称来获得作为参数。



Answer 3:

这是一个古老的职位然而,一个替代方案是使用命令选项:

ftp -n -s:ftpcmd.txt

在-n将抑制初始登录,然后将文件内容将是:(与你的FTP站点的URL替换127.0.0.1)

open 127.0.0.1
user myFTPuser myftppassword
other commands here...

这避免了在单独的行用户名/密码



Answer 4:

你需要写在文本文件中的FTP命令,并给它作为这样ftp命令的参数:

ftp -s:filename

更多资讯: http://www.nsftools.com/tips/MSFTP.htm

我不知道但如果将用户名和密码的提示工作。



Answer 5:

批处理文件的每一行都会得到执行; 但只有在上一行已完成。 在你的情况,只要它击中FTP FTP的程序将启动,并接管用户输入。 当它被关闭,则其余线路将执行。 这意味着用户名/密码永远不会发送到FTP程序,而是被输送到命令提示符本身一旦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


Answer 6:

使用

ftp -s:FileName 

因为描述下在Windows XP专业版产品文档 。

你有在地方文件名必须包含FTP到指定的文件名的命令要发送到服务器。 在论文命令

  • 打开电脑[端口]连接到FTP服务器,
  • user用户名[密码] [帐户],与FTP服务器进行身份验证,
  • 得到参数】remotefile [LOCALFILE]检索文件,
  • quit以结束FTP会话并终止FTP程序。

更多的命令下可以找到的Ftp子命令 。



Answer 7:

您可以使用PowerShell为好; 这是我做的。 当我需要下载基于图案的文件,我动态创建一个命令文件,然后让ftp做休息。

我用基本的PowerShell命令。 我不需要下载任何额外的组件。 我首先检查文件是否必要数量的存在。 如果我调用FTP第二次与MGET。 我从一个运行这个Windows Server 2008的连接到Windows XP的远程服务器。

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_[A-Z][A-Z]*" 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"
}


Answer 8:

下面是我使用。 在我的情况下,某些FTP服务器(纯ftpd的一)将始终提示输入用户名,即使-i参数,并赶上了“用户名”命令,交互密码。 我做它输入几个NOOP(无操作)命令,直到FTP服务器超时,然后登录:

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


Answer 9:

我写了一个脚本* 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

工作正常,我



文章来源: How to ftp with a batch file?