leon460 发表于 2013-9-13 14:52:13

Autoit 模拟dos窗口 实现ftp功能

在winnt4.0 中因为无法使用 _ftpOpen _ftpFileget等函数,
我想直接用autoit模拟实现如下功能:
在winnt4.0   cmd跳出窗口ftp:服务器ip --- 输入用户名----,输入密码---ls显示出文件列表--- get以上得到的文件----delete以上文件

请问以上该如何实现?谢谢

MaGiCmAn 发表于 2013-9-13 19:20:20

本帖最后由 MaGiCmAn 于 2013-9-13 19:21 编辑

Run("cmd.exe /c ftp **********","")
ControlSend("","","",xxxx)   ;用户名
ControlSend("","","","{enter}")
ControlSend("","","",xxxx)   ;密码
ControlSend("","","","{enter}")
ControlSend("""","","get xxx.txt")   ;下载文件
ControlSend("","","","{enter}")其他命令自行搜索

leon460 发表于 2013-9-17 10:01:31

回复 2# MaGiCmAn

怎样将dos窗口中 ls的命令 输入到一个文件中,以便给 get 命令使用?

MaGiCmAn 发表于 2013-9-17 11:30:35

回复 3# leon460


StdoutRead()

xms77 发表于 2013-9-17 22:15:58

Winnt4.0?这么老而且不常用的系统,AU3能行吗?我在Win98系统里面用Au3都是有很多限制的

leon460 发表于 2013-9-25 13:42:06

回复 5# xms77
公司的机台,没有办法了哦

lanfengc 发表于 2013-9-28 01:34:29

批处理配合AU3. 完全实现你要的功能.并做了异常处理. 注释的很详细,希望能帮你

;参数定义:
;$serverInfo   服务器IP
;$serverInfo   服务器登录账户
;$serverInfo   服务器密码
;$serverInfo   服务器要下载的文件列表,用星号隔开.如果只有一个文件请不要加星号.
;$serverInfo   要生成的脚本文件

Local $serverInfo = ["127.0.0.1", "12", "12", "ddf*222*333", @HomeDrive & "\GetFtpFile.sc"]        ;定义服务器数组
Local $BatString = "open " & $serverInfo & @CRLF & _        ;初始化连接字符串
                $serverInfo & @CRLF & _
                $serverInfo & @CRLF
Local $fileArray = StringSplit($serverInfo, "*")        ;拆分要下载的文件
If $fileArray = 1 Then        ;如果只有一个文件,则直接取数组数据
        $BatString &= "get " & $serverInfo & @HomeDrive & "\" & $serverInfo & @CRLF
Else        ;否则挨个把文件写入到连接字符串中.
        For $i = 1 To $fileArray
                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)        ;先删除连接字符串文件
FileWrite($serverInfo, $BatString)        ;重写连接字符串文件
Run(@SystemDir & "\ftp -s:" & $serverInfo, @SystemDir, @SW_HIDE)        ;运行命令
Do
        Sleep(100)
Until FileExists(@HomeDrive & "\" & $fileArray[$fileArray])        ;等待最后一个文件下载完成
Local $errorFileCount = 0 , $errorFileName=""        ;定义错误文件数量变量 和文件名变量
For $i = 1 To $fileArray       
        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)        ;删除脚本文件
MsgBox(64, "提示", "下载完成!,共下载" & $fileArray & "个文件." & @CRLF & "失败" & $errorFileCount & "个文件."&@CRLF&"文件名是:"&$errorFileName)


h20040606 发表于 2013-9-28 20:24:44

非常不错的写法,脚本的方法比较通用,对其他版本的windows也适用。

menfan1 发表于 2013-10-2 12:04:12

不是有FTPEX.AU3吗?
页: [1]
查看完整版本: Autoit 模拟dos窗口 实现ftp功能