从CSV导入到文件

时间:2017-12-01 19:42:00

标签: powershell csv export

我试图编写一个脚本来提取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>

1 个答案:

答案 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>
"@