我需要将包含其他目录的完整目录从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个可下载的插件,但是即使可以使用,我也可以接受。
答案 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