Вы близко! Что вам нужно сделать, так это определить строку $Pre
внутри ForEach-Object l oop. Select-Object
, который вы делаете между ними, бесполезен, если вы не хотите выбрать подмножество данных CSV для вывода.
Что-то вроде этого должно сработать:
$Head | Out-File -filepath $out -Encoding utf8
$List = Get-ChildItem $in -Filter *.csv -File | ForEach-Object {
$name = $_.BaseName
$id = '{0}_{1}' -f $name, (Get-Date).Ticks # to make this id unique, append the Ticks to the name
$Pre = @"
<div class="container">
<h2></h2>
<button type="button" class="btn btn-info" data-toggle="collapse" data-target="#$id">$name</button>
<div id="$id" class="collapse">
"@
$Post = '</p></div>'
Import-Csv -Path $_.FullName | ConvertTo-Html -Fragment -PreContent $pre -PostContent $post |
Out-File -FilePath $out -Encoding utf8 -Append
}
Альтернатива можно создать ваш $Pre
как шаблон, включая заполнители {0}
и {1}
, и заполнить имя и идентификатор внутри ForEach l oop с помощью оператора формата -f
:
$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>'
$List = Get-ChildItem $in -Filter *.csv -File | ForEach-Object {
$name = $_.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 $_.FullName | ConvertTo-Html -Fragment -PreContent $precontent -PostContent $post |
Out-File -FilePath $out -Encoding utf8 -Append
}