Windowsのバッチファイルを使用したFTPによるファイルアップロード方法は?

Windowsのバッチファイルを使用したFTPによるファイルアップロード方法は?

 

また、FTPで使えるコマンドの説明も行いますね。

 

※FTPではなくSFTPの自動実行について

 

WinSCPでのスクリプト(自動でのSFTP実行)処理方法についてはこちらのページに記載しました。

 

FTPアップロードを禁止している海外のレンタルサーバにアップロードする際などは参考にしてみて下さい。

 

 

概要

「バッチファイル」を実行して「FTPコマンドを記載したテキスト」を呼び出し、
FTP接続してコマンド実行となります。

 

 

フォルダ構成

 

今回、実施した際のフォルダ構造は以下です。

 

Cドライブ直下のdirフォルダ
 ├ ftp-yobidashi.bat (実行するバッチファイル)
 ├ ftp-command.txt (バッチファイルから呼び出されるテキスト)
 ├ uploadフォルダ (アップロードするhtmlファイル群を事前に格納しておきます。)
 └ upload-oldフォルダ (アップロードで利用後のhtmlファイル群が入ります。)

 

よって、以下、「C:\dir」や「C:\dir\upload」と記述しています。

 

アップロード先はエックスサーバ(レンタルサーバ)です。

 

 

バッチファイルの内容

ftp-yobidashi.bat

 

※ファイル名は「ftp.bat」以外にしましょう、ftp.batにすると正しく動作しません。

 

ftp -s:C:\dir\ftp-command.txt

 

move /Y C:\dir\upload\*.html C:\dir\upload-old

 

「move」コマンドを追記して、アップロードし終わったファイルは別のディレクトリに移動させるようにしました。

 

 

FTPのオプション

FTPのオプションは以下です。

 

C:\Users>ftp -?

FTP サーバー サービス (デーモンとも呼ぶ) を実行するコンピューターとの間で、
ファイルの送受信を行います。FTP は対話的に使用できます。

 

FTP
[-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-A] [-x:sendbuffer]
[-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [host]

 

-v リモート サーバーの応答を表示しません。

 

-n 最初の接続時に自動ログインを行いません。

 

-i 複数ファイルの転送中に、対話的なメッセージ表示を無効にします。

 

-d デバッグを有効にします。

 

-g ファイル名のグロビングを無効にします (GLOB コマンドを参照)。

 

-s:filename FTP コマンドを記述したテキスト ファイルを指定します。これらのコマンドは、FTP の開始後に自動実行されます。

 

-a データ接続のバインド時に、いずれかのローカル インターフェイスを使用します。

 

-A 匿名でログインします。

 

-x:send sockbuf SO_SNDBUF の既定のサイズである 8192 を上書きします。

 

-r:recv sockbuf SO_RCVBUF の既定のサイズである 8192 を上書きします。

 

-b:async count 既定の非同期数である 3 を上書きします。

 

-w:windowsize 既定の転送バッファー サイズである 65535 を上書きします。

 

host 接続先のリモート ホストのホスト名または IP アドレスを指定します。

 

メモ:

 

- mget および mput コマンドには、それぞれ yes/no/quit の意味を表す y/n/q を指定します。

 

- コマンドを中止するには Ctrl+C キーを押します。

 

 

呼び出されるテキストの内容

C:\dir\ftp-command.txt

open example.com

 

ユーザー名

 

パスワード

 

cd /example.com/public_html

 

prompt

 

mput C:\dir\upload\*.html

 

bye

 

「cd」はチェンジ ディレクトリという意味です(サーバ側)。

 

ここではエックスサーバのドキュメントルート(トップページを設置するフォルダ)であるpublic_htmlを指定しています。

 

ドキュメントルート(ルートディレクトリ)はWindowsのIISの初期状態では「C:\inetpub\wwwroot」、LinuxのApacheでは「/var/www/html」です。

 

「prompt」で対話モードを切り替えています。

 

初期状態ではオンのため、オフにしました。

 

オンのままだと自動アップロード時に「上書きしますか?」と毎回聞かれてバッチが止まります。

 

「mput」で複数のファイルを送信しています。

 

「*.html」にて、htmlファイルのみアップロードしています。

 

よって、例えばxmlファイルの場合は「*.xml」です。

 

拡張子に関わらず全ファイルをアップロードする場合は(コマンドが通れば)「*.*」です。

 

FTPのコマンド

FTPで使えるコマンド一覧は「help」で表示させることができます。

 

 

!
FTP接続前に戻ります。

 

?
ヘルプを表示します。

 

append
追加です。「append pc.txt server.txt」を実行すると、
パソコンのpc.txtの内容を、サーバのserver.txtの末尾(EOF)に追加しに行きます。

 

ascii
アスキーモードでのファイル転送方式です。改行コードが自動変換されます。
OSごとの改行コードについては以下です。

Windows  CR+LF(キャリッジリターン+ラインフィード)
Linux  LF(ラインフィード)
Mac  LF(以前はCR)

 

bell

 

binary

 

bye

 

cd
change directoryです。サーバ側のディレクトリを移動しています。

 

close

 

delete

 

debug

 

dir

 

disconnect

 

get

 

glob

 

hash

 

help

 

lcd

 

literal

 

ls

 

mdelete

 

mdir

 

mget

 

mkdir

 

mls

 

mput
複数のファイルをアップロードします。

 

open
FTPサーバへ接続しに行きます。

 

prompt
対話モードを切り替えます。オフにするとアップロード時に「上書きしますか?」など
毎回聞かれなくなります。バッチファイルでアップロードする際に使用しました。

 

put

 

pwd

 

quit

 

quote

 

recv

 

remotehelp

 

rename

 

rmdir

 

send

 

status

 

trace

 

type

 

user

 

verbose

 

 

バッチファイルの実行結果

以上のことを実施後に、ftp-yobidashi.batを実行するとFTP接続が行われファイルのアップロードが行われます。

 

最初は、バッチファイルをダブルクリックで実行するのではなく、まずコマンドプロンプトを開いてからコマンドプロンプトのウィンドウにバッチファイルをドラッグ&ドロップしましょう。

 

そうすると、バッチファイルの実行結果を後から確認することができます。

 

 

バッチファイルの定期実行

Windowsの標準機能であるタスクスケジューラにて設定/実施します。

 

※タスクスケジューラの実行ユーザの権限

 

タスクスケジューラを使用する際の一般的な留意点として、Windows10になってからは特に、タスクスケジューラを実行するユーザーの権限が足らないためにエラーとなることがあります。

 

そもそも実施方法を変更したり、動作させるプログラム(バッチやソフトウェア)を「管理者として実行する」などで対処しています。

 

関連ページ一覧