ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 99665|回复: 115

[分享] VBA操作FTP服务实践心得分享(附示例)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-3-29 10:13 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:网页交互
近来,收到一些论坛网友关于VBA操作FTP的咨询短消息。之前正好由于公司的业务需求,做了一些关于VBA操作FTP的小工具,现在整理和汇总我参阅过的资料和我制作过程的学习笔记,并提供一些示例,希望对大家能有所帮助。

      背景:我们公司的业务内部转移定价的明细价格是存储在FTP上的,是以xls为格式,以日期(yyymmdd)为文件名的excel文件存储的,每天经常频繁调用这些不同日期的定价数据,以进行内部成本核算,甚至经常领导一句话,马上就要算出某日的集团的拆借成本。因此,为了做这个内部转移定价核算的工具,开始研究VBA调用FTP文件查询等知识。本人非计算机专业,系财经类专业,没专业受过编程设计等培训,全属兴趣爱好,因此有阐述不得体的地方望各位高抬贵手。

      为了更具体些,后面附了一个自己参考一些类模块做的,以ftp1.520sky.com服务器的相关文件目录索引和查找定位为示例,方便大家理解和研究。示例里需要一些VBA类的知识,大家可以在论坛精华帖里面找找。在WINLAND老师的贴里面找到了,转了过来。

    2楼开始正文,想看WORD的同志直接下载吧,自己做的简单的示例也传上来了。然后在WINLAND老师空间也看到不错的强大工具,也转了过来。

    补充一个,在excel上直接打开FTP上的excel文件的代码,在21楼(http://club.excelhome.net/viewth ... =1139642#pid4756963

[ 本帖最后由 xmyjk 于 2011-5-15 10:39 编辑 ]

全文WORD版-我的FTP心得.rar

26.5 KB, 下载次数: 2150

FTP文件目录索引和查找示例.rar

79.72 KB, 下载次数: 2211

WINLAND老师的Wininet的VBA FTP操作的类模块.rar

24.94 KB, 下载次数: 2191

winland老师的强大的Excel简易FTP工具.zip

69.75 KB, 下载次数: 2799

评分

6

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-29 10:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
(一)        基础知识篇 (FTP简介和思路,高手跳过)

      百度百科说:FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。

       也就是说,与大多数Internet服务一样,FTP也是一个客户机/服务器系统。它最吸引人的就是,作为一个上网用户,可通过FTP在任何两台Internet主机之间拷贝文件。网上有成千上万台匿名FTP主机,这些主机上存放着数不清的文件,大大地免费资源啊。另外,公司内架构FTP服务器,也方便了公司内部文件共享。

       那怎么调用FTP协议进行连接呢?很庆幸,在windows操作系统的安装过程中,通常都安装了tcp/ip协议软件,其中就包含了ftp客户程序。但是该程序是字符界面而不是图形界面,这就必须以命令提示符的方式进行操作,很不方便。

        因此,现在主流的VBA/VB操作FTP的操作思路,主要就两种:(1)调用WinINet.DLL(后面重点讲);(2)使用VBA/VB的SHELL命令,调用CMD命令的FTP函数进行操作(频繁API调用,很容易被防火墙封杀,为API的备选方案,最后讲,带过而已);

[ 本帖最后由 xmyjk 于 2011-3-29 10:24 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-29 10:15 | 显示全部楼层
(二)        关于WinINet.DLL的API调用流程概述(API高手可以二连跳)

        微软的开发人员已经在WinINet.DLL中为我们提供了FTP功能,处理有关FTP协议的任务。我们所需要做的是,将一些提供的功能调动起来,集成起来,方便我们的操作。

        WinINet API 的说明文件网上可以搜索到。针对菜鸟,简单的说下API:API是WINDOWS应用程序编程的接口,是为了满足VBA只能操作系统地一部分的瓶颈,向VBA公开的控制操作系统地函数和对象。这些API在WINDOWS里面,以动态链接库(DLL)存在,怎么API呢?(简要带过,其他请各位自己查专业资料吧)

(1)        声明函数和定义专属常量和类型,是使VBA能像内置函数一样使用API函数的基础;

(2)        参数传递(这个没必要说了吧,天天各位经常在UDF自定义函数都用到)

(3)        调用函数后,返回句柄。要善用句柄,它是我们判断API是否成功的关键,以及下一个函数调用的必要条件,且是获得我们所需结果的必然途径。通俗而言,例如VBA让我去打酱油,首先,我要先要去拿酱油瓶,获得酱油瓶这个句柄,才能去开门,获得开门这个句柄才能去找单车,找到单车这个句柄,我才能去小卖部。。。通过关键句柄的传递,我们才能获得结果。

        WinINet.DLL的各FTP函数句柄传递过程如下:

                                                INTERNETOPEN(建立应用环境进程)
                                                                       ↓
                                                 INTERNETCONNECT(连接层,连接服务器)
                                                                       ↓
             ------------------------------------------------------------------------------
            ↓                                       ↓                         ↓                            ↓   
FTPCREATEDIRECTORY   FTPGETFILE  FTPPUTFILE    FTPSETCURRENTDIRECTIORY等   (功能函数层)
            ---------------------------------------------------------------------------------------------------
                                                ↓
                                     InternetCloseHandle(关闭与服务器连接,结束层)

    自己的图太丑了,上传一个网上找到的。

[ 本帖最后由 xmyjk 于 2011-3-29 14:18 编辑 ]
架构图片.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-29 10:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
(三)        step by step,开始研究VBA的FTP控制

        1.从上面第二点的流程中,我们可以得之,为了API调用FTP操作,我们先要运行WinINet.DLL里面的INTERNETOPEN函数(处于句柄传递结构的第一层,设置操作环境,建立应用程序进程),来取得下一步(连接服务器)的句柄:

        (1)下面是VBA/VB特定调用这一函数的声明:
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA"(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

        (2)主要参数说明:

        参数sAgent 用来指定打开这个进程的应用程序的名字,随便阿猫阿狗叫吧。

        参数lAccessType 指定我们是直接与某一主机相连还是使用代理服务器连接。如果传递值1,就直接与主机连接。如果传递3,就通过代理服务器。如果传递0,连接时就要基于注册表HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings下的注册表数值:ProxyEnable、ProxyServer和 ProxyOverride 。

        lFlags 有效性选择参数,据说是用来选择有效的参数,要传递什么什么内容结果才有效的参数。没弄懂什么东西,基本没用,一般为0;
        
       (3)举例:一般而言,我们不使用代理而打开一个Internet session 时,因此一般我们的调用是这样的:

        lngINet = InternetOpen(“eDIY FTP Client”,1, vbNullString, vbNullString, 0)

       (4)结果句柄:如果函数调用失败,lngINet 为0。不然,lngINet 就保存为下一步中将要传递给InternetConnect函数的句柄的值。

[ 本帖最后由 xmyjk 于 2011-3-29 10:27 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-29 10:17 | 显示全部楼层
2.InternetConnect函数的调用,进行与主机连接。(处于句柄传递层的第二层)

    (1)函数声明
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String,ByVal nServerPort As Integer, ByVal sUsername As String,ByVal sPassword As String, ByVal lService As Long,ByVal lFlags As Long, ByVal lContext As Long) As Long

    (2)主要参数说明:

        第一个参数hInternetSession 是InternetOpen 调用返回的句柄值(如上面的lngINet)。

        sServerName 是需连接的FTP服务器的IP地址或主机名。

        nServerPort 指示与哪一个端口连接。一般为0,它指示的是默认的端口21。

        sUsername 和 sPassword 分别用来传递用户名和口令啦。

        lService 用来设定使用的网络服务类型,这里肯定设定为为1,表示FTP连接服务。

        lFlags,据说是用来设置FTP连接将使用被动/主动FTP语义的作用(不懂,高手帮忙解释下)。一般设置0来使用非被动语义。

        最后,lContext 用来识别应用程序的前后关系(如果使用回叫信号的话),一般这个值为0。

    (3)举例,现在使用匿名的电子邮件用户名与主机FTP.MICROSOFT.COM 相连接:

        lngINetConn = InternetConnect(lngINet, ftp.microsoft.com, 0, anonymous,abc@163.com, 1, 0, 0)

    (4)结果句柄:如果函数调用失败,则lngINetConn 为0。反之,lngINetConn 就保存,将在下一步中将传递给第三层的功能函数的句柄,作为他们的句柄值。

        进行了以上两层的设置和连接,算是真正连接上FTP服务器,就可以开始以下操作目录切换,上传文件,下载文件,创建文件夹等等操作了。主要功能函数太多了,太累了不想写全,就写设置目录和上传、下载以及搜索这四个功能函数吧,其他大家自己找E文的解释看吧,嘿嘿,不要打我。找了个贴http://blog.csdn.net/bobo1394/archive/2005/08/06/447043.aspx,里面有相关的。

[ 本帖最后由 xmyjk 于 2011-3-29 10:29 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-29 10:18 | 显示全部楼层
3、非常多网友问到的,连接了FTP,进入了FTP服务器处于根目录里面,怎么切换目录呢,要切换目录才能进入下一步操作的,怎么做呢?

    用FtpSetCurrentDirector函数:

    (1)函数声明:

Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean

    (2)参数:

        第一个参数hFtpSession 是InternetConnect 调用返回的句柄值(如上面的:lngINetConn)。

        第二个lpszDirectory:为,以根目录为基准,要访问的文件夹的路径表示(用/或\在路径中划分均可,结尾是否需要/或\分隔都无所谓)

    (3)举例:假设FTP的根目录下有A文件夹,A文件夹里面还有B文件夹,怎么从初始的根目录切换到B文件夹的目录里面呢?

        Cngdir = FtpSetCurrentDirectory(lngINetConn, "A/B\")

    (4)结果句柄,如果函数调用失败,Cngdir 为0。反之成功,函数就改变lngINetConn的句柄值, 就保存为下一步中将要传递给其他功能函数函数的句柄的值。切记,后面其他函数要使用的句柄还是lngINetConn!!!而不是FtpSetCurrentDirectory 函数返回的Cngdir!!我在这里绕一大圈才发现的。

[ 本帖最后由 xmyjk 于 2011-3-29 10:32 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-29 10:20 | 显示全部楼层
4. 如何查找设定文件夹下面的文件或文件夹呢?需要使用两个新函数:FtpFindFirstFile 和InternetFindNextFile。

    (1)函数的声明是:
Private Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA"   (ByVal hFtpSession As Long, ByVal lpszSearchFile As String,lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long,ByVal dwContent As Long) As Long

Private Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" (ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long
还需定义一个数据类型:WIN32_FIND_DATA,用于保存相关路径下的文件的信息。类型结构如下:

Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type

    (2)FtpFindFirstFile主要参数:

        第一个参数hFtpSession 是InternetConnect 调用返回的句柄值。(如上面的:lngINetConn)

        lpszSearchFile 是,在FTP服务器上特定的目录里,要查询的指定名称的目录或文件名的文件,还可以使用通配符查找。例如,要列出以字母为a开始的该目录下的内容,就使用a*。
lpFindFileData就是用来保存查找后,所返回的文件的信息的自定义变量,需符合以上定义的WIN32_FIND_DATA类型,如Dim pData As WIN32_FIND_DATA

        dwFlags 和 dsContext就不说了,又是哪些回叫信号什么的,一般为0

    (3)FtpFindFirstFile举例:查找上一步操作后的文件夹下所有的文件

        lngHINet = FtpFindFirstFile(lngINetConn, "*.*", pData, 0, 0)

    (4)FtpFindFirstFile结果句柄:
 
        如果函数失败,就返回0。否则,用来继续进行列举的InternetFindNextFile函数将使用lngHInet这个句柄。另外,查找到匹配的第一个文件名和属性储存在pData 参数中。

    (5)InternetFindNextFile主要参数:

        第一个参数,hFind 是 FtpFindFirstFile 调用所返回的句柄。

        lpvFindData 就是和上面FtpFindFirstFile一样的用来保存查找结果的变量,需符合以上定义的WIN32_FIND_DATA类型,

    (6)InternetFindNextFile举例:搜索符合条件的下一个文件

        blnRC = InternetFindNextFile(lngHINet, pData)

    (7)InternetFindNextFile结果句柄:

        如果调用成功,blnRC 返回 True,否则 blnRC 为False。Err对象的LastDllError返回18表明再没有文件存在了。边查找,边可以从pData提取文件名/目录名。

    (8)如何从pData取得需要的文件名:

        strTemp = Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)

[ 本帖最后由 xmyjk 于 2011-3-29 10:35 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-29 10:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
5. 查到或知道文件名了,要下载文件,用FtpGetFile函数 。这个函数作用是,完成从一个FTP服务器上读取文件,并下载到本地存储的功能。

    (1)函数的声明是:

Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String,ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean

    (2)主要参数说明:
 
        第一个参数hFtpSession 是InternetConnect 调用返回的句柄值(如上面的:lngINetConn)。
 
        lpszRemoteFile和lpszNewFile 分别是要从FTP服务器上下载的文件的名称和下载后将在本地机上保存的文件的路径和文件名。
 
        fFailIfExists:一般为0(同名文件替换)或1 (如果本地文件已经存在则取消下载)。
 
       dwFlagsAndAttributes是用来指定本地文件的属性。一般为0。
 
      dwFlags 参数是用来设定传输方式,一般为:1是用ASCII 传输文件,和2是用二进制传输文件。

    最后还是lContext,如使用回叫信号时,用来识别应用程序前后关系。一般不用回叫,一般为0。
 
    (3)举例:以下是从FTP上下载A.TXT文件并将其保存为本地C盘的A.TXT文件。如果本地文件已经存在,就覆盖它。假设A.TXT是ASCII文件。

        blnRC = FtpGetFile(lngINetConn, A.txt,c:A.txt, 0, 0, 1, 0)

     (4)结果句柄:如果函数调用成功,blnRC为 True, 反之为False。

6、FtpPutFile函数。很简单,上面的反函数,上传本地文件用的:

    (1)函数声明:

Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, ByVal lpszRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean

    (2)主要参数:

       第一个参数hFtpSession 是InternetConnect 调用返回的句柄值。如上面的:lngINetConn);

       lpszNewFile 和lpszRemoteFile 分别是要上传的本地机上的文件的路径和文件名和将在远程主机上创建的文件的文件名。

       参数dwFlags 和FtpGetFile函数一样,一般指定为:1——用ASCII 传输文件;或2——用二进制传输文件。

       最后lContext,还是回声,如使用回叫信号时,用来识别应用程序前后关系。一般不用为0。

    (3)举例:将本地C盘的B.TXT文件上传到服务器已经设定的目录下,保存为B.TXT的写法。

       blnRC = FtpPutFile(lngINetConn, C:B.txt,B.txt,1, 0)

    (4)结果句柄:如果函数调用成功,blnRC为 True, 反之为False。

   7、现在所有功能函数处理完毕了,最后,使用InternetCloseHandle 调用来关闭连接和session 句柄。

    (1)调用函数的声明是:

Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer.
   
    (2)参数:很高兴,此函数只有一个参数hInet,是要关闭或抛弃的句柄的值。

        一般,因为InternetConnection 和InternetOpen 中有句柄,就需要调用这个关闭这两个函数各一次。另外,因为InternetConnection 句柄是由InternetOpen 句柄决定的,关闭他们时的顺序与创建时相反。
 
    (3)举例:

        InternetCloseHandle lngINetConn

        InternetCloseHandle lngINet

        估计看完上述解释,各位应该都能初步运用API去和FTP服务器联动了吧,确实有点复杂的调用过程,有没有简便的呢?有,感谢WINLAND老师,已经在论坛上面提供了FTP的类模块。http://club.excelhome.net/viewth ... =1139642#pid1412251

        大家可以参考里面的类,很简便就可以操作FTP了,里面还有一些上传下载的示例。

        另外,针对FTP服务器文件目录的罗列,和文件的模糊查找以及定位,我也做了个示例,如一楼附件,大家也可以参考一下。

[ 本帖最后由 xmyjk 于 2011-3-29 11:52 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-29 10:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
8、最后,讲讲如何用让VBA,通过shell的方式,调用CMD的FTP命令来操作FTP呢?

        直接用示例讲解(以查找并下载文件为例,其他请自行查阅CMD的FTP命令,如附表),代码如下:
  1. Sub down()
  2. filenum1 = FreeFile : filenum2 = FreeFile : filenum3 = FreeFile
  3. Open "c:\aaa.txt" For Output As #filenum1
  4. Print #filenum1, "open 10.15.88.96" & vbCrLf & "anonymous" & vbCrLf & "IEUser@" & vbCrLf & "cd .\a\b" & vbCrLf & "dir *.xls c:\c.txt" & vbCrLf & "bin" & vbCrLf & "lcd d:" & vbCrLf & "get aaa.xls" & vbCrLf & "bye"   
  5. '向aaa.txt写入调用FTP的CMD命令,open为打开服务器,后面跟着用户名和密码,然后切换到FTP的根目录(.代表根目录)下的a文件夹下面的b文件夹里,查找所有的xls文件,并返回匹配的文件文件属性序列并保存在本地C盘的c.txt文件里面。然后,以二进制传输方式,下载FTP服务器该目录下(b文件夹里)的aaa.xls文件,并保存在本地d盘根目录里。
  6. Close #filenum1
  7. Open "c:\aaa.bat" For Output As #filenum3
  8. Print #filenum3, "ftp -s:c:\aaa.txt" & vbCrLf & "Echo ""Complete"" > " & "c:\aaa.out"
  9. '创建bat命令,写入运行参数
  10. Close #filenum3
  11. Shell ("c:\aaa.bat") '运行bat文件,调用在FTP命令
  12.     'Wait for completion
  13. Do While Dir("c:\aaa.out") = ""
  14.   DoEvents
  15.   Loop
  16. 'Application.Wait (Now + TimeValue("0:00:03"))
  17. ' Clean up files
  18. If Dir("c:\aaa.bat") <> "" Then Kill ("c:\aaa.bat")
  19. If Dir("c:\aaa.out") <> "" Then Kill ("c:\aaa.out")
  20. 'If Dir("c:\b.txt") <> "" Then Kill ("c:\b.txt")
  21. If Dir("c:\aaa.txt") <> "" Then Kill ("c:\aaa.txt")
  22. End Sub
复制代码
不过采用CMD命令访问FTP有个问题我一直解决不了,希望各位高手帮忙,如果对方FTP使用UTF-8进行编码,那如何设置我们的FTP编码环境和服务器对接呢,我一直没找到好的方法,导致如果遇到这类FTP服务器,就无法用正常的中文来查找定位文件,望指教。

[ 本帖最后由 xmyjk 于 2011-3-29 11:52 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-3-29 10:23 | 显示全部楼层
附件:CMD里的FTP使用的内部命令如下(中括号表示可选项):
1.![cmd[args>:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip
2.$ macro-ame[args]:执行宏定义macro-name。
3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。
4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。
5.ascii:使用ascii类型传输方式。
6.bell:每个命令执行完毕后计算机响铃一次。
7.bin:使用二进制文件传输方式。
8.bye:退出ftp会话过程。
9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。
10.cd remote-dir:进入远程主机目录。
11.cdup:进入远程主机目录的父目录。
12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。
13.close:中断与远程服务器的ftp会话(与open对应)。
14.cr:使用asscii方式传输文件时,将回车换行转换为回行。
15.delete remote-file:删除远程主机文件。
16.debug[debug-value]:设置调试方式,显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。
17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件
18.disconnection:同close。
19.form format:将文件传输方式设置为format,缺省为file方式。
20.get remote-file[local-file]:将远程主机的文件remote-file传至本地硬盘的local-file。
21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。
22.hash:每传输1024字节,显示一个hash符号(#)。
23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。
24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。
25.image:设置二进制传输方式(同binary)。
26.lcd[dir]:将本地工作目录切换至dir。
27.ls[remote-dir][local-file]:显示远程目录remote-dir,并存入本地文件local-file。
28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。
29.mdelete[remote-file]:删除远程主机文件。
30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile 。
31.mget remote-files:传输多个远程文件。
32.mkdir dir-name:在远程主机中建一目录。
33.mls remote-file local-file:同nlist,但可指定多个文件名。
34.mode[modename]:将文件传输方式设置为modename,缺省为stream方式。
35.modtime file-name:显示远程主机文件的最后修改时间。
36.mput local-file:将多个文件传输至远程主机。
37.newer file-name:如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。
38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。
39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。
40.ntrans[inchars[outchars>:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。
41.open host[port]:建立指定ftp服务器连接,可指定连接端口。
42.passive:进入被动传输方式。
43.prompt:设置多个文件传输时的交互提示。
44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令,该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。
45.put local-file[remote-file]:将本地文件local-file传送至远程主机。
46.pwd:显示远程主机的当前工作目录。
47.quit:同bye,退出ftp会话。
48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.
49.recv remote-file[local-file]:同get。
50.reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。
51.rhelp[cmd-name]:请求获得远程主机的帮助。
52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态, 否则显示文件状态。
53.rename[from][to]:更改远程主机文件名。
54.reset:清除回答队列。
55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。
56.rmdir dir-name:删除远程主机目录。
57.runique:设置文件名只一性存储,若文件存在,则在原文件后加后缀.1, .2等。
58.send local-file[remote-file]:同put。
59.sendport:设置PORT命令的使用。
60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。
61.size file-name:显示远程主机文件大小,如:site idle 7200。
62.status:显示当前ftp状态。
63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。
64.sunique:将远程主机文件名存储设置为只一(与runique对应)。
65.system:显示远程主机的操作系统类型。
66.tenex:将文件传输类型设置为TENEX机的所需的类型。
67.tick:设置传输时的字节计数器。
68.trace:设置包跟踪。
69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。
70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3
71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。
72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.
73.?[cmd]:同help.

[ 本帖最后由 xmyjk 于 2011-3-29 10:40 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-12 07:45 , Processed in 0.037301 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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