12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FTPのコマンドを実行BATファイルに含める方法

Last updated at Posted at 2020-01-20

ファイル数が多いのが嫌だ

  • FTPをバッチファイルで実行するとき、対話形式で入力する部分をテキストファイル化して、FTPのコマンドラインオプション
    でファイル名を指定します
  • user、passwordを指定してUnixの/var/www/htmlにindex.htmlを送信する場合、以下のテキストファイルを用意します
FTP_CMD.txt
user
password
cd /var/www/html
ascii
put index.html
bye

実行するときは、FTP -s:FTP_CMD.txtのようにオプションでファイル名を指定します
ちょっとしたスクリプトを実行するのにBATファイルとコマンドファイルの2つを用意しなければなりません

  • そこで、Windows環境でバッチファイルとFTPコマンドを一つのファイルにできないかということ

基本的な構造

  1. ファイル名の拡張子は.batにします
    拡張子を.batにすることによってダブルクリックでバッチファイルとして起動します
  2. FTPのコマンドラインオプション -s: で自分自身を読み込むようにします
    FTP -s:"%~f0"
    と指定すると自分自身をFTPコマンドとして実行します
  3. バッチファイルとして実行する部分はFTPにとって無視できるようコメント行になるようにしたいのですが、
    FTPコマンドにはコメントに相当する命令がありません
    そこで、FTPコマンドの!を利用します
    FTP対話中に!を打つと、シェルにエスケープします
    Windows環境ではDOSモードになります
    そこで、!REMと入力すると、REMはDOSではコメントになるので、何もせずにFTPに制御が戻ります
    この仕組みを利用して、
    !rem 2>Nul & @Echo off & @CLS
    のように書くと、FTPにとっては無害な行で、
    バッチファイルとしては、!rem がエラーになるけれども、エラーメッセージはNULにリダイレクトすることによって
    メッセージ出力が抑止され & のあとに記述してあるコマンドが実行されます
  4. バッチ部分の最後はEXITを実行するようにすれば以降の行はバッチファイルとしては無視されます
    !rem 2> Nul & @PAUSE & @EXIT /b

実際の例

こんな感じで書けます

SAMPLE_FTP.BAT
!rem 2>Nul & @Echo off & @CLS
!rem 2>Nul & @ftp -s:%~f0
!rem 2>Nul & @pause & @exit
open HOSTNAME
USERNAME
PASSSWORD
cd /var/www/html
ascii
put test.html 
bye

・ HOSTNAMEの部分には転送先サーバーのホスト名またはIPアドレスを指定します
・ USERNAMEの部分にはログインユーザーIDを指定します
・ PASSWORDの部分にはパスワードを指定します

実行結果

ftp.png

12
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?