Для этого вам нужно рекурсивно пройти путь $in
и сгруппировать файлы CSV по имени их подпапки, которое, по-видимому, является именем отдела, которое вы хотите вывести как тег <h3>
.
$in = 'C:\Project'
$out = 'C:\Project\test.html'
$head = @'
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
'@
$Head | Out-File -filepath $out -Encoding utf8
$Pre = @'
<div class="container">
<h2></h2>
<button type="button" class="btn btn-info" data-toggle="collapse" data-target="#{0}">{1}</button>
<div id="{0}" class="collapse">
'@
$Post = '</p></div>'
Get-ChildItem $in -Filter *.csv -File -Recurse |
Group-Object {Split-Path $_.DirectoryName -Leaf} | # group the files by the folder name and loop through
ForEach-Object {
# $_.Name is the name of the Group, aka the folder name aka the department name
"<h3>$($_.Name)</h3>" | Out-File -FilePath $out -Encoding utf8 -Append
# inside each department folder loop through the files
foreach($file in $_.Group) {
$name = $file.BaseName
$id = '{0}_{1}' -f $name, (Get-Date).Ticks # to make this id unique, append the Ticks to the name
# use the $Pre template to fill in the placeholders
$precontent = $Pre -f $id, $name
Import-Csv -Path $file.FullName | ConvertTo-Html -Fragment -PreContent $precontent -PostContent $post |
Out-File -FilePath $out -Encoding utf8 -Append
}
}
# write html closing tags
'</body.</html>' | Out-File -FilePath $out -Encoding utf8 -Append
PS Вы забыли открывающие теги <html
и <head>
. Также не забудьте закрыть html, написав закрывающие теги </body></html>