• 締切済み

VBS サブルーチン化

いつもお世話になっております。 WindowsXP環境にある下記のようなVBSがあります。 コード------------------------------------------------------------------ '********変数強制宣言******** Option Explicit '********フォルダ変数宣言************ Dim LOG_DIR '********ファイル変数宣言************ Dim LOG_FILE , LOG_FILENAME LOG_DIR = "D:\LOG" LOG_FILE = "CHECK_LOG.txt" LOG_FILENAME = LOG_DIR & "\" & LOG_FILE '********オブジェクト変数定義******** Dim FSO , LOG Set FSO = WScript.CreateObject("Scripting.FileSystemObject") Set LOG = FSO.OpenTextFile(LOG_FILENAME, 2, True) '********時間変数宣言******** Dim YYYY , MM1 , DD , HHMMSS , HH , MM2 , SS '********処理開始時間******** YYYY = Year(Date) MM1 = MONTH(Date) DD = DAY(Date) HH = Right("0" & Hour(Time), 2) MM2 = Right("0" & Minute(Time), 2) SS = Right("0" & Second(Time), 2) LOG.WriteLine("★★★************** 処理日 = " & YYYY & "/" & MM1 & "/" & DD & " 処理開始時間= " & HH & ":" & MM2 & ":" & SS & " ***************★★★") LOG.WriteBlankLines(1) 処理1(省略) '********処理終了時間******** YYYY = Year(Date) MM1 = MONTH(Date) DD = DAY(Date) HH = Right("0" & Hour(Time), 2) MM2 = Right("0" & Minute(Time), 2) SS = Right("0" & Second(Time), 2) LOG.WriteLine("★★★************** 処理日 = " & YYYY & "/" & MM1 & "/" & DD & " 処理終了時間= " & HH & ":" & MM2 & ":" & SS & " ***************★★★") LOG.WriteBlankLines(1) コード------------------------------------------------------------------ 上記VBSは処理1(省略)の前後に開始時間と終了時間をログに出力しています。 ただ、開始と終了時間を取得するのにログ出力直前に現在の【YYYY , MM1 , DD , HHMMSS , HH , MM2 , SS】を取得して ログを出力するのでコードが増えてしまい、スッキリしません。 もっとシンプルに、現在の時間・時刻等をVBSサブルーチンとかで(出来れば同じVBS内に)随時取得したいのですが なかなかコードが書けません。バッチファイルでは無く、VBSだけで実現したいです。 ご存知の方がいれば、ご教授願いませんでしょうか? 何卒、宜しくお願い致します。

みんなの回答

  • 0x131cc6e
  • ベストアンサー率36% (42/115)
回答No.2

'********当日、現在時刻取得******** Sub GetNowString( ByRef strDate, ByRef strTime )     Dim wDate     Dim wTime     wDate = Date     wNow = Time     strDate = Year(wDate) & "/" & MONTH(wDate) & "/" & DAY(wDate)     strTime = Right("0" & Hour(wNow), 2) & ":" & _          Right("0" & Minute(wNow), 2) & ":" & _          Right("0" & Second(wNow), 2) End Sub Dim strDate, strTime call GetNowString( strDate, strTime ) LOG.WriteLine("★★★************** 処理日 = " & strDate & " 処理開始時間= " & strTime & " ***************★★★") LOG.WriteBlankLines(1) 処理1(省略) call GetNowString( strDate, strTime ) LOG.WriteLine("★★★************** 処理日 = " & strDate & " 処理開始時間= " & strTime & " ***************★★★") LOG.WriteBlankLines(1) ---- 単にまとめるとこんな感じですかね。 テストをしてないので正常動作は保証しませんが、言いたい事はわかってもらえると思います。 よくやるのはログ出力部分も含めてサブルーチン化することですね。 Sub WriteLog( ByRef LOG, ByVal strMsg )   '日付、時刻取得   '「日付, 時刻, メッセージ」をファイルに出力 End Sub

回答No.1

こんな感じ? ※全角空白を使っているので置換してください。 WScript.Echo GetCurrentTimeStr() ' 現在時刻を yyyy/mm/dd hh:mm:ss 形式の文字列で取得する関数 Private Function GetCurrentTimeStr()   Dim t      t = Now()   GetCurrentTimeStr = FormatZeroPadding(Year(t), 4) & "/" & _             FormatZeroPadding(Month(t), 2) & "/" & _             FormatZeroPadding(Day(t), 2) & " " & _             FormatZeroPadding(Hour(t), 2) & ":" & _             FormatZeroPadding(Minute(t), 2) & ":" & _             FormatZeroPadding(Second(t), 2) End Function ' 数値を指定桁数でゼロパディングした文字列を取得する関数 Private Function FormatZeroPadding(ByVal value, ByVal digit)   FormatZeroPadding = Right(String(digit, "0") & CStr(value), digit) End Function 「地域のプロパティ」で指定されている形式でよければ FormatDateTime(Now, 0) だけで行けるかな。

関連するQ&A