[英]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
}
}
但是使用foreach
和if
似乎有点过大。 当没有信息通过管道传递到空文件时,难道没有一种更简单的方法来不以空文件结尾吗? 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.