(解決時にはお一人様1名に500ptお支払します)

http://q.hatena.ne.jp/1242886505の関連なのですが、
ARCServeのジョブレポート機能を使用して、毎日

Daily Backup Status Report_data_ホスト名_YYYY-MM-DD-o'clock-minutes-seconds.txt

上記のファイルで作成されていきます。

この日別に作成されるファイルの内容を参照し、バックアップが完了なら
同一セグメントのWindowsXP端末に バックアップが成功しました と
MsgBoxで表示し、
バックアップが失敗なら 同様に バックアップは失敗しました と
MsgBoxで表示させたいのですが、そのVBSをお願いできないでしょうか。

参考にバックアップが成功した時と失敗した時のtxtを下記に示します。

(バックアップが成功したとき)
バックアップ ステータス レポート (日単位)
2009-05-25 17:37:10
過去24時間に実行されたバックアップ ジョブのステータス サマリを表示します。
-,2,バックアップ,1,完了,2009-05-25 16:02:46,\\******,C:\TEST,完了,******

(バックアップが失敗した時)
バックアップ ステータス レポート (日単位)
2009-05-25 17:37:10
過去24時間に実行されたバックアップ ジョブのステータス サマリを表示します。
-,17,バックアップ,16,失敗,2009-05-25 16:43:52,-,-,不明,*******

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/05/26 14:32:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:fester No.1

回答回数124ベストアンサー獲得回数20

ポイント500pt

こちらでいかがでしょうか?

指定のフォルダにある最新のログファイルをチェックするようにしてあります。

完了の文字がある場合は成功と判断しています。


Option Explicit
Const TARGETFOLDER = "D:\ARCServeBackup"    '←ここを変える。ログのフォルダ
Const FILEPREFIX = "Daily Backup Status Report_data_"   'ファイル名のパターン
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TITLE = "ARCServeのバックアップ"

'最新のファイルを探す
Dim fso, folder, file
Set fso = WScript.CreateObject("Scripting.FileSystemObject") 
Set folder = fso.GetFolder(TARGETFOLDER)

Dim prefixLen
Dim lastDate    '作成日
Dim lastFile    '新いファイル
prefixLen = Len(FILEPREFIX)
lastDate = CDate(0)
lastFile = ""

For Each file In folder.Files
    If Left(file.Name,prefixLen) = FILEPREFIX Then
        Dim d, f
        d = file.DateCreated
        f = file.Name
        If CDate(lastDate) < CDate(d) Then
            lastDate = d
            lastFile = f
        End If
    End If
Next

If lastFile = "" Then
    MsgBox "ARCServeのバックアップログがありません。", vbExclamation, TITLE
    Set fso = Nothing
    WScript.Quit
End If

'ファイルを開いてチェック
Dim strALL
Set file = fso.OpenTextFile( TARGETFOLDER & "\" & lastFile, ForReading ) 
strALL = file.ReadAll 
file.Close 
Set fso = Nothing

If InStr(strALL,"完了") > 0 Then
    MsgBox "バックアップに成功しました" & vbCrLf & vbCrLf & lastFile, vbInformation, TITLE
Else
    MsgBox "バックアップは失敗しました" & vbCrLf & vbCrLf & lastFile, vbCritical, TITLE
End If

id:meichi

本当にありがとうございます。m(_ _)m さっそく確認してみます。

fester様 まことにすみませんが、お客様から説明を求められる

かもしれませんので、コメント覧にもう少し詳しく注釈をお願い

できますでしょうか。当方プログラムに関しては さっぱり です。

すいませんが、よろしくお願いします。

確認しました。最新のログファイルを参照するように ということ

ですが、動かしたところ日付の古いファイルから参照していました。

すいません、私txtファイルといいましたがcsvファイルでした。

ログファイルの日付ですが、例をあげますと下記のようになります。

・Daily Backup Status Report_data_hostname_2009-05-24-17-37-10.csv

・Daily Backup Status Report_data_hostname_2009-05-25-17-37-10.csv

お手数かけますが、よろしくお願いします。

2009/05/26 13:47:19
  • id:fester
    こんな感じで良いでしょうか

    Option Explicit '変数宣言を強制
    Const TARGETFOLDER = "D:\ARCServeBackup" 'ログファイルの格納フォルダ ←★ここを変える。このフォルダ中のログファイルをチェック
    Const FILEPREFIX = "Daily Backup Status Report_data_" 'ファイル名のパターン 先頭からこのパターンのファイルを対象とする
    Const ForReading = 1, ForWriting = 2, ForAppending = 8 'ファイル操作の定数
    Const TITLE = "ARCServeのバックアップ" 'ダイアログのタイトル

    '最新のファイルを探す。ファイルの作成日の最も新しいファイルを取得する。
    Dim fso, folder, file
    Set fso = WScript.CreateObject("Scripting.FileSystemObject") 'ファイル操作のオブジェクトを生成
    Set folder = fso.GetFolder(TARGETFOLDER) 'フォルダオブジェクトを作成

    Dim prefixLen 'ファイル名のプレフィクスの長さ
    Dim lastDate '作成日
    Dim lastFile '新いファイル
    prefixLen = Len(FILEPREFIX) 'ファイル名のプレフィクスの長さを取得
    lastDate = CDate(0) '作成日の初期化
    lastFile = "" '新いファイル名の初期化

    'フォルダ中のファイルを列挙
    For Each file In folder.Files
    If Left(file.Name,prefixLen) = FILEPREFIX Then
    'ファイル名がプレフィクスに合致している場合
    Dim d, f
    d = file.DateCreated
    f = file.Name
    If CDate(lastDate) < CDate(d) Then
    '最新のファイルをキープする
    lastDate = d
    lastFile = f
    End If
    End If
    Next

    'ファイルが見つからない場合はエラー
    If lastFile = "" Then
    MsgBox "ARCServeのバックアップログがありません。", vbExclamation, TITLE 'メッセージを表示
    Set fso = Nothing 'オブジェクトの破棄
    WScript.Quit '終わり
    End If

    'ファイルを開いて内容をまるごと取得
    Dim strALL 'ファイルの内容
    Set file = fso.OpenTextFile( TARGETFOLDER & "\" & lastFile, ForReading ) 'ファイルを開く
    strALL = file.ReadAll 'ファイルの内容をまるごと取得
    file.Close 'ファイルを閉じる
    Set fso = Nothing 'オブジェクトの破棄

    If InStr(strALL,"完了") > 0 Then
    '完了の文字が含まれていたら成功のメッセージを表示。
    MsgBox "バックアップに成功しました" & vbCrLf & vbCrLf & lastFile, vbInformation, TITLE
    Else
    '完了の文字が含まれていない場合は失敗のメッセージを表示。
    MsgBox "バックアップは失敗しました" & vbCrLf & vbCrLf & lastFile, vbCritical, TITLE
    End If
  • id:meichi
    丁寧な注釈をありがとうございます。

    すいませんが、やっぱり動かしたところ 古い日付のファイル
    の内容を参照しています。

    すいません、私txtファイルといいましたがcsvファイルでした。

    ログファイルの日付ですが、例をあげますと下記のようになります。

    ・Daily Backup Status Report_data_hostname_2009-05-24-17-37-10.csv

    ・Daily Backup Status Report_data_hostname_2009-05-25-17-37-10.csv

    すみませんが、よろしくお願いします。
  • id:meichi
    なんども自己レスですいません。

    ファイルの作成日付を確認していませんでした。

    結論からいいますと ただしく 動きました。

    ありがとうございました。
  • id:meichi
    たびたびすいません。注釈で

    ・ファイル名のプレフィクス
    ・ファイル名がプレフィクス

    とありますが、すいません。概念がわからないです。

    ご教示方よろしくお願いします。
  • id:fester
    フォルダ中に
    Daily Backup Status Report_data_ホスト名_2009-05-24-12-00-00.txt
    Daily Backup Status Report_data_ホスト名_2009-05-25-12-00-00.txt
    Daily Backup Status Report_data_ホスト名_2009-05-26-12-00-00.txt
    というファイルが存在した場合、
    「Daily Backup Status Report_data_」で始まるファイルをチェック対象としています。
    その他のファイルは除外されます。


    プレフィックス:接頭語(prefix)
    サフィックス:接尾語(suffix)
    というんでしょうか。
    つまりは文字列の先頭部分(プレフィックス)を判断して前方一致検索をしています。
    http://eigonohon.com/muryoeigo/eigokouza-prefix-suffix.html
    http://e-words.jp/w/E5898DE696B9E4B880E887B4.html
  • id:meichi
    たびたびすいません。ありがとうございました。m(_ _)m
    これで終わります。
  • id:fester
    たくさんのポイントありがとうございます。
    微調整であればしますので、コメントに書いてください。
  • id:meichi
    たびたびすいません。お客様には 今週中には提示しようと思います。
    早速なのですが、下記の処理が必要な理由を教えていただけますでしょうか。よろしくお願いします。

    Dim prefixLen 'ファイル名のプレフィクスの長さ
    Dim lastDate '作成日
    Dim lastFile '新いファイル
    prefixLen = Len(FILEPREFIX) 'ファイル名のプレフィクスの長さを取得
    lastDate = CDate(0) '作成日の初期化
    lastFile = "" '新いファイル名の初期化
  • id:fester
    prefixLen = Len(FILEPREFIX) 'ファイル名のプレフィクスの長さを取得
    #フォルダ中のファイル名を一つ一つチェックしています。
    #その際、列挙したファイル名の先頭から、定数「FILEPREFIX」で設定した文字数分の文字列を切り出し、
    #定数「FILEPREFIX」と合致しているかどうかチェックしています。

    lastDate = CDate(0) '作成日の初期化
    lastFile = "" '新いファイル名の初期化
    #lastDate = CDate(0) はなくても良いです。
    #lastFile = "" はVBScriptの変数はVariant型なので明示的に空文字列をセットして初期化しました。
    #対象ファイルが見つかると「lastFile」にファイル名がセットされます。
    #セットされていない場合は見つからなかったということです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません