当管道对象到Export-Csv
Cmdlet始终创建一个文件,即使管道的输出为空。这是正常的行为吗?PowerShell导出CSV创建空文件
代码:
'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
an d if
似乎有点矫枉过正。没有任何信息被传送给它时,没有一个更简单的方法可以避免空文件结束?看起来很奇怪Export-Csv
只是创建一个文件,即使它没有收到任何东西..
这是唯一没有添加额外'foreach'的解决方案。提出的另一种解决方案在PS 4.0上确实不起作用。感谢您的帮助kamikatze。我发现奇怪的是'Export-Csv'没有收到任何文件时就创建了一个文件。 – DarkLite1 2014-10-20 09:39:12
请注意,这将会愉快地覆盖该文件的次数,因为有来自管道的对象,而只会保留包含最后一个对象的CSV文件。一个更好的选择可能就像'function MaybeExport-Csv {end {if($ input){Export-Csv ...}}'''''''' – Joey 2014-10-20 09:49:05
好点。编辑并添加 - 添加。 – evilSnobu 2014-10-20 09:53:13