More reading... a count is not needed.
First time I have used bufdo!
function! B_() " field delimiter ';'
g/^\d*;\+$/d " remove blank records
v/^\d\+;/d " remove non-data records
let @4=expand('%:t:r') " remove path, extension
let @4=substitute(@4,'\s\+',' ','g') " remove extra whitespace, normalize
let @4=substitute(@4,'^ ','','') " remove leading whitespace
let @4=substitute(@4,' $','','') " remove trailing whitespace
let @4=substitute(@4,'.*\zs ',';','') " replace ' ' ';' before date
let @4.=";" " append ';' filename;date
g/^\d\+;/:normal "4P " prefix lines filename;date;
endfun " example :bufdo call B_()
function! B() " everyone keep quiet
silent bufdo call B_()
endfun " example :call B()
Bill