連携 指定サーバにファイルをアップFTPexeを使いタスク登録し指定時刻に実行
※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。
※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。
Sub FTPautoTaskRegist(CDpath As String, LCDpath As String, strTime As String) '*************************************** 'FTPexeを使いタスク登録し指定時刻に実行 '*************************************** 'CDpath UPするサーバアドレス 例[www/test/] 'LCDpath UPされるファイルがあるローカルアドレス 例[C:\Temp\アップ] 'strTime UP時刻 例[20:00](小文字必須) Dim strFilePath As String Dim strFileName As String Dim CommandFileName As String Dim BatFileName As String Dim ServerName As String Dim UserID As String Dim UserPassword As String Dim strMode As String 'ascii / binary or asc / bin アスキー / バイナリ Dim Extension As String Dim FileNO As Integer 'ファイル番号 Dim CommandFileFullPath As String Dim BatFileFullPath As String '--------------------------------------------------------------------- 'パラメータ(お好み環境に変更してください) strFilePath = "C:\Temp" 'コマンドファイルの場所 ServerName = "jp-ia.com" 'UPサーバ名 UserID = "xxxx" 'ユーザーID UserPassword = "zzzzzz" 'パスワード strMode = "ascii" 'モード Extension = "htm" 'UP対象ファイルの拡張子 '--------------------------------------------------------------------- 'コマンドファイル作成 ① 'ファイル名作成 strFileName = Format(Date, "yyyymmdd") & "_" & Format(time, "hhnnss") 'コマンドファイル名 CommandFileName = strFileName & ".txt" CommandFileFullPath = strFilePath & "\" & CommandFileName 'フルパス定義 FileNO = FreeFile 'ファイルID取得 Open CommandFileFullPath For Output As #FileNO '新規作成 Print #FileNO, "open " & ServerName Print #FileNO, "user " & UserID & " " & UserPassword Print #FileNO, "hash" Print #FileNO, strMode Print #FileNO, "cd " & CDpath Print #FileNO, "lcd " & LCDpath Print #FileNO, "mput *." & Extension Print #FileNO, "Quit" Close #FileNO 'ファイルを閉じる '--------------------------------------------------------------------- '実行バッチファイルの作成 ② 'バッチファイル名 BatFileName = strFileName & ".bat" BatFileFullPath = strFilePath & "\" & BatFileName 'フルパス定義 FileNO = FreeFile 'ファイルID取得 Open BatFileFullPath For Output As #FileNO '新規作成 '実行コマンドファイルの変数定義 Print #FileNO, "set cmdTxtPath=" & CommandFileFullPath 'ログファイル生成場所の変数定義 Print #FileNO, "set cmdLogPath=" & strFilePath & "\ftplog" '日付を取得及び変数定義 Print #FileNO, "set cmdDateA=%date%" '必要箇所文字を取り出し結合 Print #FileNO, "set cmdDateB=%cmdDateA:~0,4%%cmdDateA:~-5,2%%cmdDateA:~-2,2%" '時刻を取得及び変数定義 '空白を0に置き換え格納 Print #FileNO, "set cmdTimeA=%time: =0%" '必要箇所文字を取り出し結合 Print #FileNO, "set cmdTimeB=%cmdTimeA:~0,2%%cmdTimeA:~3,2%%cmdTimeA:~6,2%" 'ログを保存するフォルダ作成 Print #FileNO, "mkdir " & """%cmdLogPath%\""" 'コマンドファイル実行及び④ログファイルの生成 Print #FileNO, "ftp -vni -s:%cmdTxtPath%>%cmdLogPath%\%cmdDateB%_%cmdTimeB%.txt" '実行コマンドファイルの削除① Print #FileNO, "del %cmdTxtPath%" Close #FileNO 'ファイルを閉じる '--------------------------------------------------------------------- '作成した実行バッチファイルをタスクに登録 ③ Dim cmd(6) As String Dim RetVal As Variant Dim batPath As String batPath = "" & BatFileFullPath & "" cmd(1) = "at " cmd(2) = strTime cmd(3) = " /" cmd(4) = "interactive " cmd(5) = "" 'オプション[本日1回だけ実行] 'コマンド及び実行バッチパス cmd(6) = cmd(1) & cmd(2) & cmd(3) & cmd(4) & cmd(5) & batPath 'タスクID取得及びタスクスケジューラに登録 RetVal = Shell(cmd(6), 6) If RetVal <> 0 Then MsgBox batPath & vbCr & "本日" & strTime & "実行のタスク登録が登録されました。" _ & vbCr & CommandFileFullPath & vbCr & "タスク" & vbCr & _ "は自動的にタスク実行後に削除されます。", vbInformation, "[タスクID]" & RetVal Else MsgBox batPath & vbCr & "タスク登録は実行出来ません。", vbCritical, "[ERROR]" End If End Sub Private Sub Test() FTPautoTaskRegist "www/test/", "C:\Temp\アップ", "17:59" End Sub |
上記のPrivate Sub Test()を実行すると(実行した日付が2010/01/06の場合)
- C:\Temp に
- ②20100106_175715.bat と
- ①20100106_175715.txt が
- 実行された日付時刻形式で作成される
- 指定された時刻に実行予定の
- ③タスクがスケジュールされ追加される
- ここでは「At1」
- タスクが実行された後は
- ③そのタスクは自動で削除される
- (1回だけの実行の場合)
- 作成したbatファイルによりコマンドファイル
- ①20100106_175715.txt が削除される
- このファイルにはIDやパスワードが記載されている
- ②20100106_175715.bat は実行後も残る
- 不要な場合は手動で削除する
- このファイルにはIDやパスワードは記載されていない
- 指定(作成)したC:\Temp\ftplog には ログファイルが 実行された日付時刻形式で 作成される④
- ログを確認後不要な場合は手動で削除する
- このファイルにはIDやパスワード及び実行ログが記載されている
①20100106_175715.txt の中身
open jp-ia.com
user xxxx zzzzzz
hash
ascii
cd www/test/
lcd C:\Temp\アップ
mput *.htm
②20100106_175715.bat の中身
set cmdTxtPath=C:\Temp\20100106_175715.txt
set cmdLogPath=C:\Temp\ftplog
set cmdDateA=%date%
set cmdDateB=%cmdDateA:~0,4%%cmdDateA:~-5,2%%cmdDateA:~-2,2%
set cmdTimeA=%time: =0%
set cmdTimeB=%cmdTimeA:~0,2%%cmdTimeA:~3,2%%cmdTimeA:~6,2%
MkDir "%cmdLogPath%\"
ftp -vni -s:%cmdTxtPath%>%cmdLogPath%\%cmdDateB%_%cmdTimeB%.txt
del %cmdTxtPath%
C:\Temp\ftplog\20100106_175900.txt ログの中身
ftp> ftp> open jp-ia.com
ftp> user xxxx zzzzzz
Hash mark printing On ftp: (2048 bytes/hash mark) .
ftp> hash
ftp> ascii
ftp> cd www/test/
Local directory now C:\Temp\アップ.
ftp> lcd C:\Temp\アップ
mput *.htm
##########
########
########
##########
ftp> Quit
※##########の部分がハッシュ(実行された時間を#で示したもの)
Mstask.exe(タスクスケジューラ)
同一時刻に実行されるよう設定された 2 つのタスクが存在すると問題が発生することがあります。最初のタスクが正しく発行されると、[タスクを実行中] と表示されます。このとき次のタスクが実行されないと、最初のタスクの後処理が完了しないままとなります。タスクの状態が [タスクを実行中] と表示されているため、以後 Mstask.exe がタスクを実行しようとし続けても実行されません。