我试图编写一个脚本来提取2个变量' code'和'描述'并将它们写入此模板。
<CodeDescriptions>
<CodeDescription>
<Code>*code*</Code>
<Description>*description*</Description>
</CodeDescription>
</CodeDescriptions>
对于每组变量,它会发现它写入模板并插入变量。
我的CSV文件看起来像这样
code,description
0001,first
0002,second
0003,third
到目前为止我的代码:
$DB = Import-Csv $PSScriptRoot\Variables.csv
Set-Content $PSScriptRoot\file.txt
foreach ($Entry in $DB) {
$First = $Entry.First
$Second = $Entry.Second
# Echo values to verify result (test purposes only)
Write-Host $First
Write-Host $Second
# Write template to file
$var=
"<CodeDescriptions>
<CodeDescription>
<Code>*code*</Code>
<Description>*description*</Description>
</CodeDescription>
</CodeDescriptions>"
Add-Content $PSScriptRoot\file.txt $var
# replace inserts with correct variables
}
正如我所说,我仍然熟悉代码,我的目标是一次从1行中提取2个变量。然后将模板写入具有正确变量的文件并循环,直到输入所有变量。
成品看起来像这样
<CodeDescriptions>
<CodeDescription>
<Code>0001</Code>
<Description>first</Description>
</CodeDescription>
</CodeDescriptions>
<CodeDescriptions>
<CodeDescription>
<Code>0002</Code>
<Description>second</Description>
</CodeDescription>
</CodeDescriptions>
<CodeDescriptions>
<CodeDescription>
<Code>0003</Code>
<Description>third</Description>
</CodeDescription>
</CodeDescriptions>
答案 0 :(得分:2)
你有两个问题。
首先,Import-Csv根据第一行中的标题定义属性的名称,因此你的foreach循环如下所示:
foreach ($Entry in $DB) {
$First = $Entry.First
$Second = $Entry.Second
应该这样开始:
foreach ($Entry in $DB) {
$Code = $Entry.Code
$Description = $Entry.Description
然后,您需要将*code*
替换为$Code
,将*description*
替换为$Description
中的$var
(或跳过中间变量,然后写:
Add-Content $PSScriptRoot\file.txt @"
<CodeDescriptions>
<CodeDescription>
<Code>$Code</Code>
<Description>$Description</Description>
</CodeDescription>
</CodeDescriptions>
"@