繁体   English   中英

PowerShell Export-CSV创建空文件

[英]PowerShell Export-CSV creates empty file

将对象管道传输到Export-Csv时,即使管道的输出为空,Cmdlet也会始终创建文件。 这是正常行为吗?

码:

'1' | where {$_ -ne '1'} | Export-Csv -Path $file -NoTypeInformation

我试图通过添加where{$_}来避免这种情况,但同时也创建了一个空文件:

'1' | where {$_ -ne '1'} | where {$_} | Export-Csv -Path $file -NoTypeInformation

解决方法是:

'1' | where {$_ -ne '1'} | Foreach {
    if ($_) {
        Export-Csv -Path $file -NoTypeInformation -Encoding UTF8 -Delimiter ';' -Append
    }
}

但是使用foreachif似乎有点过大。 当没有信息通过管道传递到空文件时,难道没有一种更简单的方法来不以空文件结尾吗? Export-Csv只是创建一个文件,即使它什么也没收到,这似乎很奇怪。

好吧,如果您要导出到CSV,则已经决定写入磁盘。 您自己的自定义过滤器怎么样?

$File = 'C:\ByteTheDisk.csv'
Filter MaybeExport-CSV {
   if ($_)
    {
      Export-CSV -InputObject $_ -Path $File -NoTypeInformation -Append -Verbose }
    }

'1' | where {$_ -ne '1'} | MaybeExport-CSV     # No file created
'2','1' | where {$_ -ne '1'} | MaybeExport-CSV # File created for '2'

我认为这将帮助您:

('1' | ?{$_ -ne '1'}) | Export-Csv -Path $file -NoTypeInformation

注意额外的刹车。

您可能会发现需要添加Select-Object,因为我刚刚检查了csv的内容,它包含对象属性而不是值:

('1' | ?{$_ -ne '1'}) | Select-Object @{Name='Value';Expression={$_}} | Export-Csv -Path $file -NoTypeInformation

在这里,它正在创建一行文件:

(@('1','2') | ?{$_ -ne '1'}) | Select-Object @{Name='Value';Expression={$_}} | Export-Csv -Path $file -NoTypeInformation

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM