批处理配合AU3. 完全实现你要的功能.并做了异常处理. 注释的很详细,希望能帮你
;参数定义:
;$serverInfo[0] 服务器IP
;$serverInfo[1] 服务器登录账户
;$serverInfo[2] 服务器密码
;$serverInfo[3] 服务器要下载的文件列表,用星号隔开.如果只有一个文件请不要加星号.
;$serverInfo[4] 要生成的脚本文件
Local $serverInfo[5] = ["127.0.0.1", "12", "12", "ddf*222*333", @HomeDrive & "\GetFtpFile.sc"] ;定义服务器数组
Local $BatString = "open " & $serverInfo[0] & @CRLF & _ ;初始化连接字符串
$serverInfo[1] & @CRLF & _
$serverInfo[2] & @CRLF
Local $fileArray = StringSplit($serverInfo[3], "*") ;拆分要下载的文件
If $fileArray[0] = 1 Then ;如果只有一个文件,则直接取数组数据
$BatString &= "get " & $serverInfo[3] & @HomeDrive & "\" & $serverInfo[3] & @CRLF
Else ;否则挨个把文件写入到连接字符串中.
For $i = 1 To $fileArray[0]
If $fileArray[$i] <> "" Then
If FileExists(@HomeDrive & "\" & $fileArray[$i]) Then FileDelete(@HomeDrive & "\" & $fileArray[$i]) ;如果本地存在该文件,则删除
$BatString &= "get " & $fileArray[$i] & " " & @HomeDrive & "\" & $fileArray[$i] & @CRLF
EndIf
Next
EndIf
$BatString &= "bye" ;连接字符串中退出FTP的命令
FileDelete($serverInfo[4]) ;先删除连接字符串文件
FileWrite($serverInfo[4], $BatString) ;重写连接字符串文件
Run(@SystemDir & "\ftp -s:" & $serverInfo[4], @SystemDir, @SW_HIDE) ;运行命令
Do
Sleep(100)
Until FileExists(@HomeDrive & "\" & $fileArray[$fileArray[0]]) ;等待最后一个文件下载完成
Local $errorFileCount = 0 , $errorFileName="" ;定义错误文件数量变量 和文件名变量
For $i = 1 To $fileArray[0]
ConsoleWrite($fileArray[$i]&@CRLF)
If FileGetSize(@HomeDrive & "\" & $fileArray[$i]) = 0 Then ;如果下载的文件大小为0,则认为错误的.
$errorFileCount += 1 ;错误数据变量加一
$errorFileName&=$fileArray[$i]&"|"
FileDelete(@HomeDrive & "\" & $fileArray[$i]) ;删除文件
EndIf
Next
$errorFileName=StringtrimRight($errorFileName,1) ;删除错误文件名字符串右侧的|字符
FileDelete($serverInfo[4]) ;删除脚本文件
MsgBox(64, "提示", "下载完成!,共下载" & $fileArray[0] & "个文件." & @CRLF & "失败" & $errorFileCount & "个文件."&@CRLF&"文件名是:"&$errorFileName)
|