如何通过一个命令行从FTP站点下载文件而无需用户交互(Windows)


13

我知道有一个FTP命令可以在Windows的命令行上运行,并且它从FTP站点下载文件。用户和密码在“那”一行cmd中指定。这些选项+密码通过应该在该命令行上。

echo open 192.168.1.64 21> ftp.txt
echo anonymous>> ftp.txt
echo ftp@ftp.com>> ftp.txt
echo bin >> ftp.txt
echo get test.txt >> ftp.txt
echo bye >> ftp.txt

ftp -s:ftp.txt

您需要通过FTP下载还是只需要使用任何程序下载这些文件?(Rsync可以从具有同步名称的文件中读取内容,也可以从命令行中读取。Scp也可以从命令行中读取。两者都不如纯文本,no_true_security FTP古老。)
Hennes 2013年

Answers:


13

尝试以下操作:批处理文件-无人参与的FTP下载

WGET ftp://ftp.mydomain.com/path/file.ext  

用于匿名下载

要么:

WGET ftp://user:password@ftp.mydomain.com/path/file.ext  

需要身份验证时。


正如@XavierStuvw通过编辑和注释所指出的那样,在Linux中可以WGET转换为小写字母wget

wget ftp://user:password@ftp.mydomain.com/path/file.ext

我看不到任何一条命令在其中一行有用户和密码切换选项。
soundhax

我记得-s开关在句子中
soundhax 2013年

2
欢迎来到超级用户!虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
2013年

1
@CalvT无异议。该注释的预期好处是,互联网搜索后,Linux用户可以登陆该页面,并对其应用的系统进行监督。事实上,这发生在我身上。
XavierStuvw

1
@CalvT标题确实准确,但是搜索引擎通常会可视化整个答案框架,并且很容易理解。当然,这不应该使读者失去正念,但是在这种情况下,Linux和Windows指令基本相同是偶然的。干得好,谢谢。
XavierStuvw

8

我找到了方法:

echo open 192.168.0.1 >> ftp &echo user admin w00t >> ftp &echo binary >> ftp &echo get file.zip >> ftp &echo bye >> ftp &ftp -n -v -s:ftp &del ftp

当我尝试时这没有用(我最终使用WinSCP的命令行客户端)。在哪个版本的Windows上进行了测试?
彼得·莫滕森

您能解释一下这条线如何运作吗?找不到任何文档。我试图使其与PSFTP工作
stallingOne

@stallingOne可以将其&视为换行器……实际上是多个命令。基本上,他使用逐行构建脚本,echo然后告诉ftp运行它。他ftp也在命名脚本文件,这使它变得混乱。
Havenard

文件名选择不当。“ ftp”既是他正在构建的脚本的文件名,又是exe的名称。因此,位于的路径分辨率ftp -n -v -s:ftp有些棘手。(每次使用“ ftp”都指的是不同的东西)
乍得·舍金斯

2

请注意,您可以使用/?来询问DOS中命令的语法。开关。例如:

C:\> FTP /?

与运行FTP服务器服务的计算机之间来回传输文件
(有时称为守护程序)。Ftp可以交互使用。

FTP [-v] [-d] [-i] [-n] [-g] [-s:文件名] [-a] [-A] [-x:sendbuffer] [-r:recvbuf
fer] [-b:asyncbuffers] [-w:windowsize] [主机]

  -v禁止显示远程服务器响应。
  -n在初始连接时禁止自动登录。
  -i在多个文件期间关闭交互式提示
                  转移。
  -d启用调试。
  -g禁用文件名通配(请参阅GLOB命令)。
  -s:filename指定一个包含FTP命令的文本文件;的
                  FTP启动后,命令将自动运行。
  -a绑定数据连接时,请使用任何本地接口。
  -以匿名身份登录。
  -x:send sockbuf覆盖默认的SO_SNDBUF大小8192。
  -r:recv sockbuf覆盖默认的SO_RCVBUF大小8192。
  -b:异步计数覆盖默认的异步计数3
  -w:windowsize覆盖默认的传输缓冲区大小65535。
  host指定远程主机的主机名或IP地址
                  主机连接。

笔记:
  -mget和mput命令将y / n / q表示是/否/退出。
  -使用Control-C中止命令。

对于您的情况,您将需要使用-s开关向其提供脚本,包括登录响应。

例如:

  1. 创建具有以下内容的脚本文件(c:\ scriptfile.txt):

    open
    servername_or_ip
    username
    password
    get
    /fullpath/thefile.txt
    c:\fullpath\thefile.txt
    quit
    
  2. 使用-s开关执行ftp并指定脚本文件名

    C:\>ftp -s:c:\scriptfile.txt
    

在Windows XP上(是的,是的,我知道),结果为“未知主机/?”。
彼得·莫滕森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.