从 CSV 导入文件

Import from CSV to File

我正在尝试编写一个脚本来提取 2 个变量 'code' 和 'description' 并将它们写入此模板。

<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>

你有两个问题。

首先,Import-Csv 根据第一行的 headers 定义了属性的名称,所以你的 foreach 循环是这样开始的:

foreach ($Entry in $DB) {
    $First = $Entry.First
    $Second = $Entry.Second

应该这样开始:

foreach ($Entry in $DB) {
    $Code = $Entry.Code
    $Description = $Entry.Description

然后你需要在你的$var中用$Code替换*code*,用$Description替换*description*(或者跳过中间变量,只写:

Add-Content $PSScriptRoot\file.txt @"
<CodeDescriptions>
    <CodeDescription>
        <Code>$Code</Code>
        <Description>$Description</Description>
    </CodeDescription>
</CodeDescriptions>
"@