使用 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]