Python 将目录递归(其中包含目录)上载到FTP

Python 将目录递归(其中包含目录)上载到FTP,python,windows,batch-file,ftp,Python,Windows,Batch File,Ftp,我需要从Windows PC将完整目录和其中的其他目录上载到FTP 目前我正在使用Windows批处理文件将文件上载到FTP: FTP-i-s:upload.FTP Upload.ftp: 打开主机名 用户名 密码 促使 箱子 cd pathonserv/path 促使 mput localpath/localfolder/* 此代码仅上载服务器上本地文件夹中的文件,而不上载本地文件夹中的文件夹 我可以使用任何推荐。我愿意将语言从Windows批处理文件更改为Python。此外,我在Wind

我需要从Windows PC将完整目录和其中的其他目录上载到FTP

目前我正在使用Windows批处理文件将文件上载到FTP:

FTP-i-s:upload.FTP
Upload.ftp:

打开主机名
用户名
密码
促使
箱子
cd pathonserv/path
促使
mput localpath/localfolder/*
此代码仅上载服务器上本地文件夹中的文件,而不上载本地文件夹中的文件夹

我可以使用任何推荐。我愿意将语言从Windows批处理文件更改为Python。此外,我在Windows PC上启用Linux终端功能。如果代码可以运行,而没有任何额外的大下载,C++也受欢迎。 安全不是很重要。目前我更喜欢速度而不是安全。我需要一个简单的脚本上传目录递归(其中的目录)到FTP有用户名和密码


而且Windows是必须的!我不希望有超过1个可下载的插件,但即使有工作,我也可以接受。

只需使用任何其他Windows命令行FTP客户端即可。大多数支持递归传输

例如,可以使用以下批处理文件:

winscp.com/ini=nul/log=upload.log/command^
“开ftp://username:password@主机名/“^
“放置C:\localpath\localfolder\*/pathnserv/path/”^
“退出”
WinSCPGUI甚至可以

还有一个转换指南(在这个小例子中并不需要)

(我是WinSCP的作者)



如果您想采用Python的方式,请选中(忽略@monkut接受的答案,其他一些答案更好)。

这将是Autoit解决方案

;ftp- Upload

#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <FTPEx.au3>

$initialPath = 'c:\Users\xxx\Downloads\'

$fileStructure = _FileListToArrayRec($initialPath, '*', $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
;~ _ArrayDisplay($fileStructure)

_Example()

Func _Example()
    Local $sServer = '192.168.178.XXX'
    Local $sUsername = 'admin'
    Local $sPass = 'xxx'
    Local $Err, $sFTP_Message

    Local $hOpen = _FTP_Open('MyFTP Control')
    Local $hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass, 0, 21, $INTERNET_SERVICE_FTP, $INTERNET_FLAG_PASSIVE)
    If @error Then
        MsgBox($MB_SYSTEMMODAL, '_FTP_Connect', 'ERROR=' & @error)
    Else
        _FTP_GetLastResponseInfo($Err, $sFTP_Message)
        ConsoleWrite('$Err=' & $Err & '   $sFTP_Message:' & @CRLF & $sFTP_Message & @CRLF)
        ; do something ...
        _FTP_DirSetCurrent($hConn, '/ALL')
        _FTP_DirPutContents($hConn, $initialPath, '/ALL', 1)
        Sleep(100)
        _FTP_DirSetCurrent($hConn, '/ALL')
        Local $aFile = _FTP_ListToArray($hConn, 0)
        _ArrayDisplay($aFile)
    EndIf
    Local $iFtpc = _FTP_Close($hConn)
    Local $iFtpo = _FTP_Close($hOpen)
EndFunc   ;==>_Example
;ftp-上传
#包括
#包括
#包括
#包括
$initialPath='c:\Users\xxx\Downloads'
$fileStructure=\u FileListToArrayRec($initialPath,“*”,$FLTAR\u filefolders,$FLTAR\u RECUR,$FLTAR\u SORT,$FLTAR\u FULLPATH)
;~ _ArrayDisplay($fileStructure)
_示例()
Func_示例()
本地$sServer='192.168.178.XXX'
本地$sUsername='admin'
本地$sPass='xxx'
本地$Err,$sFTP_消息
本地$hOpen=\u FTP\u Open('MyFTP控制')
本地$hConn=\u FTP\u Connect($hOpen、$sServer、$sUsername、$sPass、0、21、$INTERNET\u服务\u FTP、$INTERNET\u FLAG\u被动)
如果@error那么
MsgBox($MB_SYSTEMMODAL,'.'FTP_Connect','ERROR='和@ERROR)
其他的
_FTP\u GetLastResponseInfo($Err,$sFTP\u消息)
控制台写入(“$Err=”&$Err&“$sFTP_消息:”&@CRLF&$sFTP_消息&@CRLF)
; 做点什么。。。
_FTP_DirSetCurrent($hConn,/ALL'))
_FTP_目录内容($hConn,$initialPath,'/ALL',1)
睡眠(100)
_FTP_DirSetCurrent($hConn,/ALL'))
本地$aFile=\u FTP\u列表阵列($hConn,0)
_ArrayDisplay($aFile)
恩迪夫
本地$iFtpc=\u FTP\u关闭($hConn)
本地$iFtpo=\u FTP\u关闭($hOpen)
EndFunc;==>_例子

压缩、上传、解压怎么样?@异种生物学家我完全同意。我试过了,但在ftp上找不到任何关于解压缩zip文件的信息。也许你能帮忙?!您必须通过putty或任何其他方式使用另一个会话在服务器上执行该命令。另一个解决方案是通过path rec.并为每个文件启动上载作业。我想,这将是10行代码,例如Windows上的Autoit。@Xenologist我肯定会这样检查的!完美答案!此外,我还想指定适合我的代码。我在winscp网页上使用了你的答案。“C:\Program Files\WinSCP\WinSCP.com”/ini=nul/command^“open”^“put C:\localpath\localfolder*/pathnserv/path/“^”exit“是否有方法检查WinSCP的安装并使用批处理下载+安装(如果未安装)?不需要安装WinSCP。您可以简单地获取它的两个二进制文件,并以与存储/分发批处理文件相同的方式存储/分发它们。完美!感谢您提供的所有信息和您的出色应用程序!谢谢你的努力!这时马丁的回答被接受了。但这也很有效。