- 締切済み
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だけで実現したいです。 ご存知の方がいれば、ご教授願いませんでしょうか? 何卒、宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 0x131cc6e
- ベストアンサー率36% (42/115)
'********当日、現在時刻取得******** 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
- bluecampus
- ベストアンサー率66% (138/209)
こんな感じ? ※全角空白を使っているので置換してください。 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) だけで行けるかな。