"Diary" インターネットさんへの恩返し

いつもソースコードコピペばかりなので,みなさまへ少しばかりの恩返しを

【VBS】複数ファイルのファイルのはじめと終わりの行を出力



スポンサーリンク

特定のディレクトリにある、全てのファイルの最初の行と、最後の行を取得し、コンマ区切りでファイル出力するスクリプト

よく1行目に "start write log YYYY/MM/DD HH..."みたいになっていて、最後の行に "finish YYYY/MM/DD HH..."ってなっているものを、ひと通り一発で見たいときなど使って下さい。

個人的にはSAPでExport/Importのパッケージごとのログファイルから、それぞれの処理の開始、終了時間を出して、パッケージ順序の最適化をするために使っています。Time analyzer使えば一発ですが,たまにちゃんと動かないことがあるもんでつくってみた。需要ないけど。

Option Explicit

Dim objFileSys
Dim strTargetPath
Dim objFolder
Dim objItem
Dim objResultFile

Set objFileSys = CreateObject("Scripting.FileSystemObject")

'このディレクトリにある全てのファイルを対象とする
strTargetPath = "C:\test"

Set objFolder = objFileSys.GetFolder(strTargetPath)

'取得結果を、result.txtに出力する
Set objResultFile = objFileSys.OpenTextFile("result.txt", 2, True)

For Each objItem In objFolder.Files

	Dim strOpenFile
	Dim objTextStream
	Dim strText
	Dim last_line
	Dim start_line
 	Dim count
	Dim last_DayTime,start_DayTime
	Dim last_Time,start_Time,last_Day,start_Day

	count = 0

	strOpenFile = strTargetPath & "\" & objItem.Name
	Set objTextStream = objFileSys.OpenTextFile(strOpenFile, 1)

	Do While objTextStream.AtEndOfStream <> True

		'最初の行を取得
		If count = 0 then
			start_line = objTextStream.ReadLine
		End if

		'最後の行を取得(実質は1行ずつ取得し変数に入れる)
		last_line = objTextStream.ReadLine

		count = count + 1

	Loop
	
	strText = objItem.Name & "," & start_line & "," & last_line
	objResultFile.WriteLine(strText)

	objTextStream.Close
	Set objTextStream = Nothing
	
Next

Wscript.echo "処理が終了しました"

' ------------- ファイル書き込み -------
objResultFile.Close

Set objFolder = Nothing
Set objFileSys = Nothing