我需要将其中包含其他目录的完整目录从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个可下载的插件,但即使它有工作但我可以接受它。
只需使用任何其他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和其他一些更好)。
这将是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