如何跳过 CSV 文件中的第一行?

5

我希望在生成CSV文件时跳过第一行的Name和Path。我不知道如何做到这一点,也没有头绪。

以下是我的代码:

function Get-Path{
    param($Object)

    $path = $object.Name
    $parent = Get-View $Object.ExtensionData.ResourcePool
    while($parent){
    $path = $parent.Name + "/" + $path

        if($parent.Parent){
            $parent = Get-View $parent.Parent
        }
        else{$parent = $null}
    }
    $path
}

Get-VM | Select Name,
@{N="Path";E={(Get-Path -Object $_) -replace "^.*?Resources"}} | Export-csv C:\izaz\test.csv -NoTypeInformation
5个回答

9
最简单的导出没有标题的CSV文件的方法是使用ConvertTo-Csv,然后使用Select-Object跳过第一行:
Get-VM `
| Select Name, @{N="Path";E={(Get-Path -Object $_) -replace "^.*?Resources"}} `
| ConvertTo-Csv -NoTypeInformation `
| Select-Object -Skip 1 `
| Set-Content -Path C:\izaz\test.csv

我来发布几乎完全相同的解决方案。干得好Bacon,这是这个问题的理想答案。 - FoxDeploy

3

Import-CSV -Header $StringWithAlternateHeader 可以为您导入CSV的数组设置标题。它不会替换任何现有的标题。如果您在导入之前不删除CSV中的旧标题,则旧标题将成为数组中的一条记录。

Example CSV:
Name,Age
Sally,15
Paul,14

$Array = Import-CSV .\example.csv
ARRAY[0] is Sally,15
ARRAY[1] is Paul,14

$Array = Import-CSV .\example.csv -Header @("Child","Age")
ARRAY[0] is Name,Age
ARRAY[1] is Sally,15
ARRAY[2] is Paul,14

0

0
如果您计划使用 Import-csv 处理 csv 文件,请查看 cmdlet 文档中的 -header 参数。该参数允许您指定替代列名,而不是存储在 csv 文件中的列名。
这是一种替代方案,可供参考。

实际上,这与OP所问的相反(导入没有标题的CSV而不是导出没有标题的CSV)。 - Ansgar Wiechers
你说得对,除了它还涵盖了使用一个标题导出并使用不同标题导入的情况。从 OP 中不清楚意图是使用 ps 还是其他应用程序读取 csv。 - Walter Mitty

0
你可以使用一个简单的 IF 语句来去掉你的标题行。
$Array = Import-CSV .\example.csv -Header @("Child","Age")
if ($Array.Child -ne "Child)" {

ARRAY[1] is Sally,15
ARRAY[2] is Paul,14
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接