递归上传目录(包含其中的目录)到FTP

问题描述 投票:2回答:2

我需要将其中包含其他目录的完整目录从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个可下载的插件,但即使它有工作但我可以接受它。

python windows batch-file ftp
2个回答
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和其他一些更好)。


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
© www.soinside.com 2019 - 2024. All rights reserved.