以递归方式将目录(包含目录)上传到FTP

时间:2019-02-22 11:33:15

标签: python windows batch-file ftp

我需要将包含其他目录的完整目录从Windows PC上传到FTP。

当前,我正在使用Windows批处理文件将文件上传到FTP:

FTP -i -s:upload.ftp

Upload.ftp:

open hostname
username
Password
prompt
bin
cd pathonserv/path
prompt
mput localpath/localfolder/*

此代码仅从服务器上的本地文件夹上传文件,而不上传本地文件夹中的文件夹。

我可以使用任何推荐。我愿意将语言从Windows批处理文件更改为Python。另外,我在Windows PC上启用了Linux终端功能。如果代码无需大量额外下载即可运行,也欢迎使用C ++。

安全性不是很重要。目前,我更喜欢速度而不是安全性。我需要一个简单的脚本将目录(其中包含目录)递归上传到具有用户名和密码的FTP。

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

2 个答案:

答案 0 :(得分:4)

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

例如对于WinSCP FTP client,您可以使用以下批处理文件:

winscp.com /ini=nul /log=upload.log /command ^
    "open ftp://username:password@hostname/" ^
    "put C:\localpath\localfolder\* /pathonserv/path/" ^
    "exit"

WinSCP GUI甚至可以generate a batch file template for you

还有一个转换Windows FTP script to WinSCP的指南(并不是在这种琐碎的情况下确实需要)。

(我是WinSCP的作者)


如果要采用Python方式,请选中Upload folders from local system to FTP using Python script(忽略@monkut,answer by @Edgard和其他一些更好的答案)。

答案 1 :(得分:2)

这将是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