メイン画像

VBScript - ファイル転送(FTP)

VBScript - ファイル転送(FTP)


VBScript の標準機能にファイル転送(FTP)はありません。

VBScript で FTP によるファイル転送を行うには、主に以下の方法が考えられます。

  • FTP をサポートした ActiveX コントロールを使う
    • 有名どころだと「BASP21 FTPオブジェクト」があります。
      ですが、現在でも使えるかどうかは分かりません。
  • FTP クライアント(外部プログラム)を呼び出す

今回は後者の FTP クライアント(外部プログラム)を呼び出す方法でファイル転送してみます。

FTP クライアントは、Windows に標準でインストールされている ftp コマンドを利用します。

何も準備しなくていいので、これが一番手軽な方法でしょう。

FTP の利用方法

VBScript で FTP を利用する方法は以下のとおりです。

  1. FTP コマンドファイル(FTP コマンドを記述したテキストファイル)を作る。
    次のようなイメージで作る。

    open <host>
    <user>
    <password>
    <command>
    :
    bye

    <host> には FTP サーバー、<user><password> にはユーザーとパスワード。
    <command> には FTP コマンドを書く。

  2. FTP コマンドを実行するバッチファイルを作る。
    FTP コマンドの -s オプションには、作成した FTP コマンドファイルのパスを指定する。

  3. バッチファイルを実行する。

  4. バッチファイルと FTP コマンドファイルを消す。

サンプルスクリプト

以下のスクリプトは hoge.co.jp サーバーにユーザー john で接続し、temp ディレクトリの内容を C:\ftptest\list.txt に出力します。

'FTP コマンドファイル、BAT ファイルを作る
With CreateObject("Scripting.FileSystemObject")
    'FTP コマンドファイルを作る
    Dim ftpCommandFilePath
    ftpCommandFilePath = .BuildPath(.GetSpecialFolder(2).Path, .GetTempName)

    With .CreateTextFile(ftpCommandFilePath, True, False)
        .Write "open hoge.co.jp" & vbCrLf & _
               "john" & vbCrLf & _
               "pass1234" & vbCrLf & _
               "dir ""temp"" ""C:\ftptest\list.txt""" & vbCrLf & _
               "bye"
        .Close
    End With

    'FTP コマンドを実行する BAT ファイルを作る
    Dim batFilePath
    batFilePath = .BuildPath(.GetSpecialFolder(2).Path, .GetTempName & ".bat")

    With .CreateTextFile(batFilePath, True, False)
        .WriteLine "ftp -s:""" & ftpCommandFilePath & """"
        .WriteLine "exit"
    End With
End With

'FTP を実行する(BAT ファイル経由で)
With CreateObject("WScript.Shell")
    'ウインドウ非表示、実行終了まで待機する
    Dim exitCode
    exitCode = .Run(batFilePath, 0, True)

    If exitCode = 0 Then
        'TODO: 正常終了時のコードを書く
        WScript.Echo "FTP成功"
    Else
        'TODO: 異常終了時のコードを書く
        WScript.Echo "FTP失敗"
    End If
End With

'FTP コマンドファイル、BAT ファイルを消す
With CreateObject("Scripting.FileSystemObject")
    .DeleteFile ftpCommandFilePath
    .DeleteFile batFilePath
End With

 

スクリプトで作成している FTP コマンドファイル

open hoge.co.jp
john
pass1234
dir "temp" "C:\ftptest\list.txt"
bye

dir コマンド以降の部分に任意のコマンドを書きます。

たとえば get ならファイル受信、put ならファイル送信となります。

FTP の処理ログを取るには

ftp コマンドに -d オプションを付けるとデバッグ出力が有効になります。

出力内容をテキストファイルにリダイレクトすれば、そのまま処理ログとして使えます。

スクリプトのバッチファイルを作る部分を、以下のように変更してください。

With .CreateTextFile(batFilePath, True, False)
    .WriteLine "ftp -d -s:""" & ftpCommandFilePath & """ > """ & 〈処理ログのパス〉 & """"
    .WriteLine "exit"
End With

留意事項

Windows の ftp コマンドは、FTPS や SFTP などの FTP 以外のプロトコルには対応していません。

非対応のプロトコルを使いたい場合、別のクライアントソフト(WinSCP 等)を利用する必要があります。


アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事