Использование:
1) Помещаем код в vbs файл, например linescounter.vbs
2) Выделяем в папке интересующие файлы (любого типа, не обязательно сорсы) и переносим на файл скрипта. Появится IE с таблицей отчета
2) В коде булевый параметр skipEmpty задает игнорирование пустых строк (определяется через Trim; по умолчанию 0)
' VB Script Document
option explicit
Const thisScriptName = "linescounter.vbs"
Const ForReading = 1
'если запускаем скрипт автономно
if WScript.ScriptName = thisScriptName then
if WScript.Arguments.Count > 0 then
Dim cb
set cb = new FindFileCallback
Dim fname
Dim res
for each fname in WScript.Arguments
res = cb.Found(fname)
If res(0) <> 0 Then
Msgbox Join(res, vbCrLf), vbCritical, "Ошибка в " & thisScriptName
End If
next
set cb = nothing
else
WScript.Echo "Формат вызова: " & thisScriptName & " " & "{имя файла}"
end if
end if
'Данный интерфейс предоставляет callback функцию для FindFile
class FindFileCallback
Public skipEmpty
Private fso
Private table
Private filesCount
Private linesTotal
Private Sub Class_Initialize()
skipEmpty = 0
linesTotal = 0
set fso = CreateObject("Scripting.FileSystemObject")
set table = new TableBuilder
table.ColumnsCount = 4
table.AddCell "Номер"
table.AddCell "Имя"
table.AddCell "Папка"
table.AddCell "Количество строк"
End Sub
Private Sub Class_Terminate()
table.AddCell "Всего строк"
table.AddCell linesTotal
set fso = Nothing
set table = Nothing
End Sub
'Данная функция будет вызываться в процессе работы FindFile::Find() для каждого найденного файла
Public Function Found(fname)
On Error resume next
filesCount = filesCount + 1
Dim fp
set fp = fso.OpenTextFile(fname, ForReading, False)
Dim s
DIm linesCounter
do while not (fp.atEndOfStream)
s = fp.ReadLine
if (not CBool(skipEmpty)) or (CBool(skipEmpty) and Trim(s) <> "") then
linesCounter = linesCounter + 1
end if
loop
fp.Close
table.AddCell filesCount
table.AddCell "<a href = """ & fname & """> " & fso.GetFileName(fname) & "</a><br>"
Dim dir
dir = fso.GetParentFolderName(fname)
table.AddCell "<a href = """ & dir & """> " & dir & "</a><br>"
table.AddCell linesCounter
linesTotal = linesTotal + linesCounter
if Err.Number = 0 then
Found = Array(0, "", "")
else
Found = Array(Err.Number, Err.Source, Err.Description)
Err.Clear
end if
end function
end class
class TableBuilder
Private oIE
Private doc
Private nCols
Private iCol
Private Sub Class_Initialize()
Set oIE = CreateObject("InternetExplorer.Application")
oIE.Navigate "about:blank"
oIE.Visible = 1
Do While (oIE.Busy)
WScript.Sleep 200
Loop
Set doc = oIE.Document
doc.open
doc.WriteLn "<html><head><title></title></head>"
doc.WriteLn "<body>"
doc.WriteLn "<table align = left border = 0 cellspacing = 10>"
nCols = 1
End Sub
Private Sub Class_Terminate()
doc.WriteLn "</table>"
doc.WriteLn "</body></html>"
doc.Close
set oIE = nothing
End Sub
Public property Let ColumnsCount(val)
if val > 0 then
nCols = val
else
nCols = 1
end if
end property
Public Sub AddCell(cellBody)
if iCol = 0 then
doc.WriteLn "<tr>"
end if
doc.WriteLn "<td>"
doc.WriteLn CStr(cellBody)
doc.WriteLn "</td>"
iCol = iCol + 1
if iCol = nCols then
doc.WriteLn "</tr>"
iCol = 0
end if
end sub
end class
Здравствуйте, ST1, Вы писали:
ST1>Использование:
ST1>1) Помещаем код в vbs файл, например linescounter.vbs
ST1>2) Выделяем в папке интересующие файлы (любого типа, не обязательно сорсы) и переносим на файл скрипта. Появится IE с таблицей отчета
ST1>2) В коде булевый параметр skipEmpty задает игнорирование пустых строк (определяется через Trim; по умолчанию 0)
Как в винде всё сложно.