windows 命令行不支持被动ftp,如何通过写windows批处理,定时上传文件到FTP服务器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows 命令行不支持被动ftp,如何通过写windows批处理,定时上传文件到FTP服务器?相关的知识,希望对你有一定的参考价值。

我的客户端是windows,通过写windows批处理,定时上传文件到FTP服务器。

windows 命令行不支持被动ftp?如何写此windows批处理?谢谢!^_^~~

微软自带的FTP命令客户端,不支持PASV模式。虽然你可以使用QUOTE PASV这个命令强制使用PASV模式,但是当你用ls命令列出服务器目录列表,你会发现它还是使用PORT方式来连接服务器的。

可以使用命令行工具curl,它支持被动模式的ftp访问
参考技术A 试下下面的写法,应该OK的:
set "ftpUser=UserName"
set "ftpPass=PassWord"
set "ftpIP=目标IP地址"
set "ftpFile=%temp%\Temp.txt" >"%ftpFile%" (
echo,%ftpUser%
echo,%ftpPass%
echo bin
echo Prompt off
echo cd 目标目录
echo lcd 本地目录
echo mput 文件
echo bye
)
ftp -s:"%ftpFile%" %ftpIP%追问

麻烦示例一下,
echo cd 目标目录
echo lcd 本地目录
怎么写?

参考技术B 可以使用命令行工具curl,它支持被动模式的ftp访问 参考技术C 修改ftp成标准的服务器不就解决了.追问

上传是文件在局域网内部,有防火墙阻挡。自然只能使用被动模式与FTP服务器成功建立数据连接的。而想写windows批处理,自然要用到windows命令行。则windows命令行,只支持主动模式。 所以,难以实现。 将注意力投向linux。

追答

服务器防火墙打开20和21端口,客户端不需要做任何设置就能访问到了.
这是网络的问题和批处理是没有太大关系的.如果用linux来解决,不如把防火墙都关闭,换成ipsec防火墙来做安全.

追问

公司服务器在IDC机房,有防火墙保护;需要上传文件的windows客户端在办公室,也有防火墙。 现状:FTP服务器21、20端口,是全部打开的。在FTP主动、被动模式讨论中,防火墙是会把FTP服务端连接过来的的20端口阻挡掉。被动模式是为了穿过防火墙的。如果写windows批处理,当然靠windows命令行来运行了。windows命令行不支持FTP被动模式(用windows命令行连接的FTP全是主动模式的)。

追答

如果服务器上允许到20-21端口,
客户端又允许来自20-21端口,那么何来防火墙限制,又何须考虑哪种模式。
一直用iis架设的ftp,服务器上有访问策略,还有acl防火墙保护。
客户端也有acl防火墙保护,同时还开启了windows防火墙,使用cmd ftp从未遇过连接和传输问题。

追问

windows批处理,都是运行在CMD 命令行的。
你知道,用cmd命令登陆FTP上传下载是哪种使用哪种模式?我的答案是主动模式。如果这个概念搞不清楚,先打住。
我的FTP服务器是SERV-U,采用默认设置,意味着被动、主动都是开启的(同网段服务器之间可相互用cmd命令行登陆、并上传下载FTP文件)。 可见是我的局域网防火墙阻挡了20端口,只允许被动模式与FTP建立连接了。

追答

所以问题是打开防火墙,而无需纠结模式.

追问

现在,防火墙上采用默认设置(默认支持被动),无需特意为FTP做相关设置。一种模式即可满足需求。~~~我看你“针对此种环境下的windows 批处理怎么写?” 括号中,只问题关键所在。否则,我也无需追问。

追答

我的回答没有显示,去我的空间看看吧?用powershell写的脚本上传ftp.
如果需要被动模式,加上如下语句就可以了.
$upFTP.UsePassive= $true;

以上是关于windows 命令行不支持被动ftp,如何通过写windows批处理,定时上传文件到FTP服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置FTP的主动模式和被动模式

ubuntu和centos,centos上用vsftp搭建FTP服务器,windows上用FileZilla Client主被动模式都可以正常访问

FTP主动模式和被动模式的区别

大白话解释一下“被动FTP模式”是啥意思?

ftp主动与被动模式区别

FTP主动模式和被动模式的比较