使用 DriveHQ CommandFTP 进行 FTP 脚本编写

使用 DriveHQ CommandFTP 进行 FTP/SFTP 脚本编写


1. 介绍
2. DriveHQ CommandFTP 语法和参数
3. 创建 FTP 脚本文件
3.1 FTP脚本文件示例
3.2 带参数的 FTP 脚本文件
4. 使用 Windows 任务计划程序自动传输文件
5. 使用 DriveHQ CommandFTP 实现文件夹自动同步
6. FTP 命令参考
6.1 标准FTP命令
6.2 DriveHQ 高级 FTP 命令

1. 介绍

DriveHQ CommandFTP 是一款功能强大的命令行 FTP 和 SFTP 客户端,旨在取代 Windows FTP 客户端。它支持 FTP 脚本编写,并且兼容任何标准 FTP/SFTP 服务器。

FTP/SFTP 在通过互联网传输大型文件/文件夹方面非常流行。命令行 FTP 客户端广泛用于通过 FTP 脚本进行自动化文件传输。许多人使用 Windows 系统内置的命令行 FTP 客户端。然而,内置 FTP 客户端存在一些主要缺点:

  • 1. 它仅支持主动模式 FTP,而这种模式经常被路由器、防火墙或安全软件阻止。
  • 2. 它仅支持普通的FTP,不支持数据加密。
  • 3. 它不支持自动恢复/重试。

DriveHQ CommandFTP 旨在取代默认的 Windows FTP 客户端。它具有以下优势:

  • 1. 它支持主动模式和被动模式的FTP。
  • 2. 它支持基于 SSL 的 FTP(FTPS 和 FTPES)和 SFTP。
  • 3. 它支持自动恢复/重试。
  • 4. 它支持数据压缩和加密。
  • 5. 它支持文件夹的下载/上传。
  • 6. 它支持文件夹镜像/同步。
  • 7. 它支持事件日志记录,用于审计和故障排除。
  • 8. 它可以于手术后发送电子邮件报告。
  • 9. 它支持功能更强大的FTP脚本。

在许多情况下,DriveHQ CommandFTP 可以直接替代 Windows FTP 客户端。它们语法和命令行参数类似。然而,DriveHQ CommandFTP 提供了更多功能。它只需一条命令即可处理复杂的文件传输任务。凭借其对 SFTP 的支持,您可以编写 FTP 脚本文件,并将其连接到 SFTP 服务器运行。

2. DriveHQ CommandFTP 语法和参数

句法


cmdftp FTP_SERVER [-u:USERNAME] [-p:PASSWORD] [-i] [-A] [-k:"PRIVATE_KEY_FILE"] [-s:"FTP_SCRIPT_FILE"] [-d:"LOG_FILE"] [-m:"SOURCE_FTP_SERVER", "DESTINATION_FTP_SERVER"] [CMDOPTIONS]
cmdftp [-s:"FTP_SCRIPT_FILE"] [-d:"logfile"]

参数

范围 描述
FTP_SERVER FTP/SFTP 服务器名称或 IP 地址,例如 ftp.drivehq.com、ftp://ftp.drivehq.com 或 ftps://ftp.drivehq.com。除非参数包含 -s:FTP_SCRIPT_FILE,否则此项为必填项
-u:USERNAME 指定 FTP/SFTP 帐户用户名。
-p:PASSWORD 指定FTP/SFTP帐户密码。
-k:"PRIVATE_KEY_FILE" (可选)指定 SFTP 私钥文件路径。
-s:"FTP_SCRIPT_FILE" 可选。指定 FTP 脚本文件路径。如果提供了此参数,则除“-d:LOG_FILE”选项外,其他参数将被忽略。

命令选项

/xo[:time] 排除旧文件
/xn[:time] 排除较新的文件
/xf:filenames 排除文件,文件以逗号分隔
/xd:foldernames 排除文件夹,文件夹之间用逗号分隔

日志记录选项

-d:"LogFileName" 指定日志文件路径。如果使用“-d”参数而未指定日志文件名,则会在控制台窗口中显示日志。

3. 创建 FTP 脚本文件

FTP脚本在IT管理员和系统集成商中非常流行。它们广泛应用于自动化数据备份和文件传输。FTP脚本允许您创建一个包含FTP命令和输入列表的文本文件。然后,您可以一次性按顺序运行这些命令。由于一个脚本文件可以包含许多FTP命令,因此它可以完成非常复杂的文件传输任务。

使用默认的 Windows FTP 客户端进行 FTP 脚本编写功能非常有限:它仅支持普通的 FTP,安全性不高;它仅支持主动模式 FTP,而这种模式经常被路由器/防火墙阻止。DriveHQ CommandFTP 支持 Windows FTP 客户端的大部分功能;此外,它还支持 Windows FTP 客户端所不具备的许多功能。DriveHQ CommandFTP 与所有标准 FTP 服务器兼容。

要编写 FTP 脚本文件,您可以先以交互模式运行 FTP 命令。打开命令窗口,输入以下命令,如下图所示:

这些命令通常包括:连接到 FTP 服务器、登录服务器、列出目录中的文件/文件夹、更改当前目录、上传/下载/删除文件等等。如果您只是偶尔使用 FTP,那么上述方法就足够了。但是,如果您需要重复传输/备份/删除文件,例如作为计划备份任务的一部分,或者与其他公司进行 EDI(电子数据交换)通信,您可以轻松编写一个可以反复使用的脚本文件。结合操作系统支持的任务计划程序,您可以实现业务流程的自动化。

FTP脚本文件示例
FTP脚本文件与交互式FTP会话中使用的命令/输入相同。基本上,您只需在文本编辑器(例如记事本)中创建一个文本文件,然后像在交互模式下一样输入命令和输入即可。DriveHQ的CommandFTP与Windows FTP客户端的界面非常相似。以下命令可以在Windows FTP客户端和DriveHQ的CommandFTP客户端中运行。要使用CommandFTP,请输入cmdftp而不是ftp。例如::

C:\>ftp
ftp> open ftp.drivehq.com
Connected to ftp.drivehq.com.
220 Welcome to the most popular FTP hosting service! Save on hardware, software,
 hosting and admin. Share files/folders with read-write permission. Visit http:/
/www.drivehq.com/ftp/;
User (ftp.drivehq.com:(none)): dhqdemo
331 User name ok, need password.
Password: xxxxxxxxx
230 User dhqdemo logged on.
ftp> cd test
250 CWD command successful. "/test" is current directory.
ftp> delete orders.xml.bak
550 File not found.
ftp> rename orders.xml orders.xml.bak
350 File exists, ready for destination name.
250 File "/test/orders.xml" renamed successfully.
ftp> put c:\test\orders.xml
200 Port command successful.
150 Opening BINARY mode data connection for file transfer.
226 Transfer complete
ftp: 41 bytes sent in 0.06Seconds 0.65Kbytes/sec.
ftp> quit
221 Bye

C:\>


如您所见,这些命令将:
- 登录到 FTP 服务器:ftp.drivehq.com;
- 请输入用户名和密码;
- 切换到本地目录“c:\test”;
- 切换到 FTP 目录“/test”;
- 删除 FTP 服务器上的“Orders.xml.bak”文件(如果存在);
- 在 FTP 服务器上,将文件“Orders.xml”(如果存在)重命名为“Orders.xml.bak”;
- 将本地文件“Orders.xml”上传到FTP服务器;
- 出口

您可以在命令窗口中运行这些命令来调试代码,然后再将其保存到脚本文件中。脚本内容如下:

open ftp.drivehq.com
USERNAME
xxxxxxxxx
cd test
delete orders.xml.bak
rename orders.xml orders.xml.bak
put c:\test\orders.xml
quit

上述FTP脚本可以每天执行,以自动将新订单信息传输到FTP服务器。它会将最新的“Orders.xml”文件上传到FTP服务器;在上传文件之前,它会重命名(备份)先前的文件。
要运行 FTP 脚本,只需执行带有 -s 选项的 FTP 命令即可。使用 Windows FTP 客户端,您可以这样做:
	ftp -s:ftpscript.txt 

使用 DriveHQ CommandFTP 客户端,您可以
	cmdftp -s:ftpscript.txt 
    

带参数的 FTP 脚本
上述FTP脚本是静态的,可以重复运行,但灵活性不高。例如,如果需要为多个客户端传输数据,可能需要使用不同的文件夹。要重复使用同一个FTP脚本,就需要支持额外的参数。目前有两种解决方案:
(1)使用批处理脚本文件动态创建 FTP 脚本文件。Windows 批处理脚本可以接受命令行参数。如果您使用 Windows FTP 客户端,这是唯一的解决方案。
(2)DriveHQ CommandFTP 支持其他参数。
第一种方法需要创建一个批处理文件,例如 test.bat。将文件保存在 C:\test 文件夹中。您可以通过输入以下命令来运行该批处理文件:

	c:\test\test.bat PARAM1 PARAM2 ...

test.bat 文件将如下所示:

@echo off
echo open ftp.drivehq.com> ftpscript.txt
echo USERNAME>> ftpscript.txt
echo PASSWORD>> ftpscript.txt
echo cd %1>>  ftpscript.txt
echo delete %2.bak>>  ftpscript.txt
echo rename %2 %2.bak>> ftpscript.txt
echo put c:\%1\%2>> ftpscript.txt
echo quit>> ftpscript.txt


这样,您就可以将批处理文件的参数传递给 FTP 脚本文件。同一个批处理脚本可以被不同的公司重复使用,例如::
    c:\test\test.bat c:\OrdersOfCompanyA ordersOfCompanyA.xml
    c:\test\test.bat c:\OrdersOfCompanyB ordersOfCompanyB.xml
使用 DriveHQ CommandFTP,您可以运行带有附加参数的 FTP 脚本。这样,您无需创建批处理脚本文件。只需使用以下命令运行 FTP 脚本即可:
    
cmdftp -s:ftpscript.txt argument1 argument2 argument3 ...
    
FTP脚本文件需要进行如下少量修改:

# %1 is like "test", %2 is like "orders.xml"
# This file is saved as c:\temp\ftpscript2.txt
# to run it, use:
# cmdftp -s:c:\temp\ftpscript2.txt -%1:test -%2:orders.xml

open ftp.drivehq.com
USERNAME
PASSWORD
cd /%1
delete /%1/%2.bak
rename /%1/%2 /%1/%2.bak
put c:\%1\%2
quit

在上述脚本文件中,文件夹名称被替换为 %1,文件名被替换为 %2。要运行 FTP 脚本,您必须将这些参数作为命令行参数提供。
    
cmdftp -s:c:\temp\ftpscript2.txt -%1:test -%2:orders.xml
    
当 DriveHQ CommandFTP 执行脚本文件时,它会将 %1 替换为“test”,将 %2 替换为“orders.xml”。

4. 使用 Windows 任务计划程序自动传输文件

无论您是使用批处理文件还是直接使用 DriveHQ CommandFTP,都可以在 Windows 任务计划程序中安排文件传输任务。您可以设置任务每天、每周或每月运行。在高级设置中,您甚至可以设置任务每隔几小时或几分钟运行一次。您还可以设置任务的启动时间。要启动任务计划程序,请在搜索框中输入“任务计划程序”,请参见以下屏幕截图:

Launch Windows Task Scheduler

点击“任务计划程序”,即可启动 Windows 任务计划程序。

Click create basic task in Windows Task Scheduler

要创建任务,请点击“创建基本任务”。

Create basic scheduled task

输入任务名称和描述,然后单击“下一步”。

Select task trigger / schedule

选择任务计划。您可以选择每日、每周或每月。如果您想按小时运行任务,可以稍后在高级设置中进行设置。点击“下一步”设置操作。

Scheduled Task - Action - select a program

在“操作”页面中,选择“启动程序”,然后单击“下一步”。

Scheduled Task - Action - Select DriveHQ CommandFTP

浏览并选择 DriveHQ CommandFTP (cmdftp.exe) 作为程序。在“添加参数”文本框中添加命令行参数。“起始位置”为可选,您可以将其设置为与 EXE 文件相同的文件夹。单击“下一步”完成任务创建。

要访问高级设置,请点击“任务计划库”,您可以看到已计划任务的列表。双击“上传订单”任务,即可编辑任务设置。

Scheduled Task - Advanced Settings - Edit Task Properties

请注意,默认情况下,任务仅在用户登录时运行。您可以在此处更改设置,以便在用户未登录时也运行任务。

5. 使用 DriveHQ CommandFTP 实现文件夹自动同步

DriveHQ CommandFTP 支持文件夹镜像。将本地文件夹与 FTP 文件夹同步非常简单。只需使用以下命令即可:

	cmdftp FTP_SERVER -u:username -p:password -m:"LOCAL_FOLDER|FTP_FOLDER"

使用 Windows 任务计划程序,您可以运行此命令定期同步这两个文件夹。

6. FTP 命令参考

登录FTP服务器后,您可以向FTP服务器发送FTP命令。Windows FTP客户端支持以下命令。 请注意,这些命令与 FTP协议中定义的FTP命令 不同。 每个FTP协议命令通常只处理一个简单的问题。但在Windows FTP客户端中,一个FTP命令可能使用多个FTP协议命令。

DriveHQ CommandFTP 与 Windows FTP 客户端类似,支持类似的命令和语法。此外,它还支持一些 DriveHQ 特有的高级 FTP 命令,例如复制、移动、上传、下载或删除文件夹的命令。

6.1 Windows FTP客户端命令

Windows FTP客户端(ftp.exe)支持以下FTP命令:
FTP 命令 描述
! 此命令可在本地操作系统和 FTP 服务器之间切换。登录 FTP 服务器后,默认切换到 FTP 服务器。如果想在本地运行命令,通常可以使用以下命令 !CMD_NAME, e.g. !dir, !mkdir, ETC。
? 显示帮助信息。
append 追加到文件中。
ascii 设置ASCII传输模式。
bell 开启“命令完成时发出哔声”功能。
binary 设置二进制传输模式。
bye 断开FTP会话并退出。
cd 更改目录。
close 终止FTP会话。
delete 删除文件。
debug 切换调试模式的开启或关闭。
dir 列出目录中的文件和子文件夹。
disconnect 断开FTP会话。
get 从远程FTP服务器获取文件。
glob 启用或禁用通配符。禁用后,文件名中的通配符(在 得到 命令)会被按字面意思执行。
hash 切换打印“#”的选项,用于显示每个传输的缓冲区。
help 显示帮助信息;通常使用 help COMMAND_NAME。
lcd 如果单独输入,则显示当前本地工作目录;否则,更改本地工作目录。
literal 向连接的 FTP 服务器发送任意命令,并期望收到一行响应。
ls 列出FTP文件夹中的文件。
mdelete 删除FTP服务器上的多个文件。
mdir 列出多个 FTP 目录的文件/子文件夹。
mget 从 FTP 服务器下载多个文件到本地工作文件夹。
mkdir 创建一个新目录。
mls 列出多个FTP目录的内容。
mput 将多个本地文件上传到 FTP 服务器。
open 连接到FTP服务器。
prompt 启用或禁用对多个命令的交互式提示。
put 将一个文件上传到FTP服务器。
pwd 打印FTP服务器上的工作目录。
quit 断开与FTP服务器的连接并退出。
quote 与字面命令相同(发送任意 ftp 命令)。
recv 从FTP服务器下载/接收文件。
remotehelp 从远程服务器获取帮助。
rename 重命名FTP服务器上的文件。
rmdir 删除 FTP 服务器上的目录。
send 发送一个文件。
status 显示当前选项的状态。
trace 切换数据包跟踪。
Type 设置文件传输类型。
user 发送新用户信息(用户名)。
verbose 开启或关闭详细输出。

6.2 DriveHQ 高级 FTP 命令

DriveHQ CommandFTP 支持一些更高级的 FTP 命令:

FTP 命令 描述
download 下载文件夹或文件。
句法: Download [FTP-FILEorFOLDER-PATH] [LOCAL-FILEorFOLDER-PATH]
upload 上传文件夹或文件。
句法: Upload [LOCAL-FILEorFOLDER-PATH] [FTP-FILEorFOLDER-PATH]
mirror 镜像本地文件夹和 FTP 文件夹。
句法: MIRROR [LOCAL-FOLDER-PATH] [FTP-FOLDER-PATH]
deleteoldfiles 在指定文件夹中,删除超过 x 天的文件。
句法: deleteoldfiles [FTP-PATH] /xo:[time]