連携 指定サーバにファイルをアップFTPexeを使いタスク登録し指定時刻に実行

VB&VBA
FROG ふろっぐ
 
  • オプション

    本文印刷

    お気に入りに追加

  • 検索

    Googlewwwjp-ia
     

    Googlewwwjp-ia
     
  • 情報

  • 関連

[VB&VBA][連携 指定サーバにファイルをアップFTPexeを使いタスク登録し指定時刻に実行]
Option Explicit


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 'ファイルを閉じる
'---------------------------------------------------------------------
'実行バッチファイルの作成 A

'バッチファイル名
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%\"""
'コマンドファイル実行及びCログファイルの生成
Print #FileNO, "ftp -vni -s:%cmdTxtPath%>%cmdLogPath%\%cmdDateB%_%cmdTimeB%.txt"
'実行コマンドファイルの削除@
Print #FileNO, "del %cmdTxtPath%"

Close #FileNO 'ファイルを閉じる
'---------------------------------------------------------------------
'作成した実行バッチファイルをタスクに登録 B
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の場合)
  • 登録完了メッセージ
  • が表示
  • OK
  • C:\Temp
  • A20100106_175715.bat
  • @20100106_175715.txt
  • が実行された日付時刻形式
  • 作成される
  • 指定された時刻に実行予定の
  • Bタスクがスケジュールされ追加される
  • ここでは「At1」
  • タスクが実行された後は
  • Bそのタスクは自動で削除される
  • (1回だけの実行の場合)
  • 作成したbatファイルにより
  • コマンドファイル
  • @20100106_175715.txt
  • が削除される
  • このファイルにはIDやパスワードが記載されている
  • A20100106_175715.bat
  • は実行後も残る
  • 不要な場合は手動で削除する
  • このファイルにはIDやパスワードは記載されていない
  • 指定(作成)したC:\Temp\ftplog
  • には
  • ログファイルが
  • 実行された日付時刻形式
  • 作成されるC
  • ログを確認後
  • 不要な場合は手動で削除する
  • このファイルにはIDやパスワード及び実行ログが記載されている
  • 登録されたタスクのプロパティ
@20100106_175715.txt の中身
open jp-ia.com
user xxxx zzzzzz
hash
ascii
cd www/test/
lcd C:\Temp\アップ
mput *.htm
A20100106_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:&nbsp;=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 がタスクを実行しようとし続けても実行されません。
<関連>





Production Japan Import Application. Since 1998