WEB Win標準装備FTPexeを使いVBAで操作-8

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

    本文印刷

    お気に入りに追加

  • 検索

    Googlewwwjp-ia
     

    Googlewwwjp-ia
     
  • 情報

  • 関連

[VB&VBA][WEB Win標準装備FTPexeを使いVBAで操作-8]
  • MS-DOSコマンドプロンプトでFTPexeを操作する
  1. WEB Win標準装備FTPexeを使いVBAで操作-6のバッチファイルとコマンドファイルを把握してからご覧下さい。
  2. VB又はVBAで記述する
  • バッチファイルからコマンドファイルを生成する
  • 今度はWEB Win標準装備FTPexeを使いVBAで操作-6で作成したコマンドファイルをバッチファイルで作成します。
  • 以下の例は「ftptest.bat」とファイル名を指定
:: ===============================================
:: バッチファイルの基礎
:: ===============================================
:: ←[::]は[rem]つまりコメント

:: ***********************************************
:: 各環境変数定義(set)
:: ***********************************************
:: ■コマンドファイル生成場所の変数定義
set cmdPath=C:\Temp
:: ■コマンドファイル名の変数定義
set cmdFire=%cmdPath%\ftptest.txt
:: -----------------------------------------------
:: ■サーバ名の変数定義
set cmdopen=open jp-ia.com
:: ■ユーザ名とパスワードの変数定義
set cmdpw=user ユーザ名 パスワード
:: ■hashの変数定義
set cmdhash = hash
:: ■モードの変数定義
set cmdascii = ascii
:: ■アップ先の変数定義
set cmdcd=cd www/test/
:: ■アップ元の変数定義(日本語OK)
set cmdlcd=lcd C:\Temp\アップ
:: ■アップするファイルの変数定義
set cmdput = mput * .htm
:: ■終了コマンドの変数定義
set cmdquit = Quit

:: ***********************************************
:: コマンドファイルに必要事項を入力記入 (echo)
:: ***********************************************
:: ※「>,>>」はリダイレクト
:: ※「>」は新規又は上書き
:: ※「>>」は追加
:: ※「%」環境変数を使う場合はその変数を「%」で囲みます

echo %cmdopen%>%cmdFire%
echo %cmdpw%>>%cmdFire%
echo %cmdhash%>>%cmdFire%
echo %cmdascii%>>%cmdFire%
echo %cmdcd%>>%cmdFire%
echo %cmdlcd%>>%cmdFire%
echo %cmdput%>>%cmdFire%
echo %cmdquit%>>%cmdFire%

:: 終わり
  • ftptest.txtの中身
  • 上記を実行後、作成されたテキストファイル
  • C:\TempつまりCドライブ直下に[Temp]というフォルダを作成して下さい。(無い場合)
  • 上記をテキストファイルにコピーし任意の場所へ保存後
  • [XXXX.bat]のような任意の名前に変更
  • 実行してみて下さい
  • どうですか?
  • WEB Win標準装備FTPexeを使いVBAで操作-6で作成したコマンドファイルと粗同じものが
  • C:\Tempに生成されています
  • [XXXX.bat]で使えるコマンドはコマンドファイルの実行の他にもコマンドファイルの削除等もっと沢山あります
  • 以下の例は「ftptest1.bat」とファイル名を指定
:: ===============================================
:: バッチファイルを実行、実行ログ作成
:: ===============================================
:: ←[::]は[rem]つまりコメント

:: ***********************************************
:: 各環境変数定義(set)
:: ***********************************************

:: ■実行テキストファイルの変数定義
set cmdTxtPath=C:\Temp\ftptest.txt
:: ■ログファイル生成場所の変数定義
set cmdLogPath=C:\Temp\ftplog
:: ■日付を取得及び変数定義
set cmdDateA=%date%
:: 必要箇所文字を取り出し結合
set cmdDateB=%cmdDateA:~0,4%%cmdDateA:~-5,2%%cmdDateA:~-2,2%
:: ■時刻を取得及び変数定義
:: 空白を0に置き換え格納
set cmdTimeA=%time: =0%
:: 必要箇所文字を取り出し結合
set cmdTimeB=%cmdTimeA:~0,2%%cmdTimeA:~3,2%%cmdTimeA:~6,2%
:: ◇ログを保存するフォルダ作成
MkDir "%cmdLogPath%\"

:: ***********************************************
:: FTP実行
:: ***********************************************
:: ◇テキストファイル実行及びログファイルの生成
ftp -vni -s:%cmdTxtPath%>%cmdLogPath%\%cmdDateB%_%cmdTimeB%.txt
:: ◇実行テキストファイルの削除
del %cmdTxtPath%
  • 上記は先ほど作成したテキストファイル(コマンドファイル)を
  • 実行し更に実行結果のログファイルを生成し
  • 更にテキストファイル(コマンドファイル)を削除します
  • 実行順は先ずftptest.batそれからftptest1.batになります
  • ftptest1.batはファイルをアップする実行を行いますので
  • アップするファイル数により相応の時間を要します
  • 実行状況は非表示ですがログにはきちんと記録されます
  • 作成されたログファイル
  • 上記がログファイル
  • ハッシュは[###]で表示されます
  • 他にも「mput *.htm」の後に仮のファイルをアップして
  • 今度はそのファイルを「get」コマンドでダウンロード
  • という方法もありますがログを残すのがベターでしょう
  • VBやVBAで作成する場合もコマンドファイルテキストを作成し
  • それを実行する上記のようなftptest1.batを作成し
  • ftptest1.batはタスクに登録
  • PC電源を落とさず寝る
  • 寝ているうちに実行
  • 朝、確認
  • その他サイトマップを生成しておき同じ要領でアップするなど
  • いろいろアレンジして実行してみて下さい
  • VBやVBAから.batを実行するにはココを参考に!
Mstask.exe(タスクスケジューラ)
  • 同一時刻に実行されるよう設定された 2 つのタスクが存在すると問題が発生することがあります。最初のタスクが正しく発行されると、[タスクを実行中] と表示されます。このとき次のタスクが実行されないと、最初のタスクの後処理が完了しないままとなります。タスクの状態が [タスクを実行中] と表示されているため、以後 Mstask.exe がタスクを実行しようとし続けても実行されません。
VB/VBAから直接コマンドファイルテキストを実行しログファイルも作成する
Option Explicit


Sub ShellFTPlog()
'*****************************************
'ShellでFTP.exeコマンドを実行しログを残す
'*****************************************

'通常このように記述しますが
'Shell(ftp -vni -s:"C:\Temp\ftptest.txt">"C:\Temp\ftplog\testLog.txt",6)
'ログを残すコマンド、[>]リダイレクトが付加する為
'@コマンドインタープリタ(16ビット)
'Aパイプ[|]
'@〜Aの関係でエラーになります
'この場合は「コマンドプロンプト経由」で記述します

Dim txtPath As String
Dim cmd(4) As String
Dim LogPath As String

Dim RetVal As Variant

cmd(1) = "cmd.exe /c "
cmd(2) = "ftp -vni -s:"
cmd(3) = ">"
txtPath = """C:\Temp\ftptest.txt"""
LogPath = """C:\Temp\ftplog\testLog.txt"""
cmd(4) = cmd(1) & cmd(2) & txtPath & cmd(3) & LogPath

'cmd(4) =[cmd.exe /c ftp -vni -s:"C:\Temp\ftptest.txt">"C:\Temp\ftplog\testLog.txt"]

RetVal = Shell(cmd(4), 6)

If RetVal <> 0 Then
    MsgBox txtPath & vbCr & "実行されました。", vbInformation, "[タスクID]" & RetVal
Else
    MsgBox txtPath & vbCr & "実行出来ません。", vbCritical, "[ERROR]"
End If

End Sub
<関連>
シリーズ関連リンク
WEB Win標準装備FTPexeを使いVBAで操作- 1 基本1
2 基本2
3 基本3
4 基本4
5 コマンド一覧
6 バッチファイル
7 タスク登録
8 VB又はVBAでの記述





Production Japan Import Application. Since 1998