找回密码
 加入
搜索
查看: 9558|回复: 8

[AU3基础] Autoit 模拟dos窗口 实现ftp功能

  [复制链接]
发表于 2013-9-13 14:52:13 | 显示全部楼层 |阅读模式
在winnt4.0 中因为无法使用 _ftpOpen _ftpFileget等函数,
我想直接用autoit模拟实现如下功能:
在winnt4.0   cmd  跳出窗口  ftp:服务器ip --- 输入用户名----,输入密码---  ls显示出文件列表--- get以上得到的文件----delete以上文件

请问以上该如何实现?谢谢
发表于 2013-9-13 19:20:20 | 显示全部楼层
本帖最后由 MaGiCmAn 于 2013-9-13 19:21 编辑
Run("cmd.exe /c ftp **********","")
ControlSend("[CLASS:ConsoleWindowClass]","","",xxxx)   ;用户名
ControlSend("[CLASS:ConsoleWindowClass]","","","{enter}")
ControlSend("[CLASS:ConsoleWindowClass]","","",xxxx)   ;密码
ControlSend("[CLASS:ConsoleWindowClass]","","","{enter}")
ControlSend("[CLASS:ConsoleWindowClass]""","","get xxx.txt")   ;下载文件
ControlSend("[CLASS:ConsoleWindowClass]","","","{enter}")
其他命令自行搜索
 楼主| 发表于 2013-9-17 10:01:31 | 显示全部楼层
回复 2# MaGiCmAn

怎样将dos窗口中 ls的命令 输入到一个文件中,以便给 get 命令使用?
发表于 2013-9-17 11:30:35 | 显示全部楼层
回复 3# leon460


StdoutRead()
发表于 2013-9-17 22:15:58 | 显示全部楼层
Winnt4.0?这么老而且不常用的系统,AU3能行吗?我在Win98系统里面用Au3都是有很多限制的
 楼主| 发表于 2013-9-25 13:42:06 | 显示全部楼层
回复 5# xms77
公司的机台,没有办法了哦
发表于 2013-9-28 01:34:29 | 显示全部楼层
批处理配合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)


发表于 2013-9-28 20:24:44 | 显示全部楼层
非常不错的写法,脚本的方法比较通用,对其他版本的windows也适用。
发表于 2013-10-2 12:04:12 | 显示全部楼层
不是有FTPEX.AU3吗?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-26 21:14 , Processed in 0.085418 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表