VBScript - ファイル転送(FTP)
VBScript - ファイル転送(FTP)
VBScript の標準機能にファイル転送(FTP)はありません。
VBScript で FTP によるファイル転送を行うには、主に以下の方法が考えられます。
- FTP をサポートした ActiveX コントロールを使う
- 有名どころだと「BASP21 FTPオブジェクト」があります。
ですが、現在でも使えるかどうかは分かりません。
- 有名どころだと「BASP21 FTPオブジェクト」があります。
- FTP クライアント(外部プログラム)を呼び出す
今回は後者の FTP クライアント(外部プログラム)を呼び出す方法でファイル転送してみます。
FTP クライアントは、Windows に標準でインストールされている ftp コマンドを利用します。
何も準備しなくていいので、これが一番手軽な方法でしょう。
FTP の利用方法
VBScript で FTP を利用する方法は以下のとおりです。
-
FTP コマンドファイル(FTP コマンドを記述したテキストファイル)を作る。
次のようなイメージで作る。open <host> <user> <password> <command> : bye
<host>
には FTP サーバー、<user>
と<password>
にはユーザーとパスワード。<command>
には FTP コマンドを書く。 -
FTP コマンドを実行するバッチファイルを作る。
FTP コマンドの-s
オプションには、作成した FTP コマンドファイルのパスを指定する。 -
バッチファイルを実行する。
-
バッチファイルと 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 等)を利用する必要があります。
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事にコメントをしてみませんか?