DriveHQ CommandFTPを使用したFTPスクリプト

DriveHQ CommandFTPを使用したFTP/SFTPスクリプト


1. 導入
2. DriveHQコマンドFTPの構文とパラメータ
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は、WindowsのFTPクライアントに代わる強力なコマンドラインFTP/SFTPクライアントです。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はより多くの機能を提供します。複雑なファイル転送タスクを1つのコマンドで処理できます。SFTPをサポートしているため、FTPスクリプトファイルを作成し、それをSFTPサーバーで実行することも可能です。

2. DriveHQコマンドFTPの構文とパラメータ

構文


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」オプションをLogFileNameなしで使用した場合、ログはコンソールウィンドウに表示されます。

3. FTPスクリプトファイルの作成

FTPスクリプトは、IT管理者やシステムインテグレーターの間で非常に人気があります。自動データバックアップやファイル転送に広く利用されています。FTPスクリプトを使用すると、FTPコマンドと入力項目の一覧を含むテキストファイルを作成できます。そして、これらのコマンドを1回の実行で順番に実行できます。1つのスクリプトファイルには多数のFTPコマンドを含めることができるため、非常に高度なファイル転送タスクを実行できます。

Windows標準のFTPクライアントでは、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を使用するには、ftpの代わりにcmdftpと入力してください。例::

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スクリプトを実行するには、FTPコマンドに-sオプションを付けて実行するだけです。Windows FTPクライアントでは:
	ftp -s:ftpscript.txt 

DriveHQ CommandFTPクライアントを使用すると
	cmdftp -s:ftpscript.txt 
    

パラメータ付きFTPスクリプト
上記のFTPスクリプトは静的です。繰り返し実行できますが、柔軟性に欠けます。例えば、複数のクライアントにデータを転送する必要がある場合、異なるフォルダを使用したいでしょう。同じFTPスクリプトを再利用するには、追加のパラメータをサポートする必要があります。解決策は2つあります:
(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

タスクのスケジュールを選択してください。毎日、毎週、毎月から選択できます。タスクを1時間ごとに実行したい場合は、後で詳細設定で設定できます。次へをクリックしてアクションを設定してください。

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タスクスケジューラを使用すると、このコマンドを実行して2つのフォルダーを定期的に同期できます。

6. FTPコマンドリファレンス

FTPサーバーにログインした後、FTPサーバーにFTPコマンドを送信できます。Windows FTPクライアントは以下のコマンドをサポートしています。 これらのコマンドはFTPプロトコルで定義されているFTPコマンドとは異なることにご注意ください。 FTPプロトコルコマンドは通常、1つの単純な問題のみを処理します。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など
? ヘルプ情報を表示します。
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サーバーに任意のコマンドを送信し、1行の応答を受け取ります。
ls FTPフォルダ内のファイル一覧を表示します。
mdelete FTPサーバー上の複数のファイルを削除する。
mdir 複数のFTPディレクトリ内のファイル/サブフォルダを一覧表示します。
mget FTPサーバーから複数のファイルをローカルの作業フォルダにダウンロードします。
mkdir 新しいディレクトリを作成します。
mls 複数のFTPディレクトリの内容を一覧表示する。
mput 複数のローカルファイルをFTPサーバーにアップロードします。
open FTPサーバーに接続します。
prompt 複数のコマンドで対話型プロンプトを有効または無効にします。
put FTPサーバーにファイルを1つアップロードしてください。
pwd FTPサーバー上の作業ディレクトリを表示します。
quit FTPサーバーから切断して終了します。
quote 文字通りのコマンド(任意のFTPコマンドを送信する)と同じです。
recv FTPサーバーからファイルをダウンロード/受信する。
remotehelp リモートサーバーからヘルプを取得します。
rename FTPサーバー上のファイルの名前を変更します。
rmdir FTPサーバー上のディレクトリを削除します。
send ファイルを1つ送信してください。
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]