You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell的Export-CSV和Out-File生成空白文件问题求助

问题原因及解决方案

哦,这问题我太熟了!你导出的文件之所以是空白的,核心问题出在Remove-Item -WhatIf这一步——这个命令默认不会把它处理的对象传递到管道下游。

你在控制台能看到大量记录,是因为Get-ChildItem和Where-Object输出的文件对象直接在控制台显示了,但到Remove-Item这里,管道就“断”了,后面的Export-CSV(或Out-File)根本接不到任何数据,自然生成空白文件。

下面给你两种场景的解决方案:

场景1:只想预览要删除的文件,同时导出文件列表

先把筛选后的文件对象存到变量里,再分别处理预览和导出:

$path = "C:\test"
# 先筛选出符合条件的文件
$filesToDelete = Get-ChildItem -Path $path -Include *.edi, *.x12, *.filename, *.dat, *.log, *.mdn, *.req -Recurse -Force | 
    Where-Object {!$_.PSIsContainer -and ((Get-Date)-$_.LastWriteTime).Days -gt 30 }

# 预览要删除的文件(-WhatIf模式)
$filesToDelete | Remove-Item -Force -WhatIf

# 导出文件列表到CSV(加-NoTypeInformation避免生成多余的类型头)
$filesToDelete | Export-Csv D:\output.csv -NoTypeInformation

# 如果要用Out-File导出文本
$filesToDelete | Out-File D:\output.txt

场景2:实际删除文件,同时导出被删除的文件列表

给Remove-Item加上-PassThru参数,让它把被删除的对象传递到管道下游,这样Export-CSV就能拿到数据了:

$path = "C:\test"
Get-ChildItem -Path $path -Include *.edi, *.x12, *.filename, *.dat, *.log, *.mdn, *.req -Recurse -Force | 
    Where-Object {!$_.PSIsContainer -and ((Get-Date)-$_.LastWriteTime).Days -gt 30 } | 
    Remove-Item -Force -PassThru | 
    Export-Csv D:\output.csv -NoTypeInformation

# 用Out-File的版本
Get-ChildItem -Path $path -Include *.edi, *.x12, *.filename, *.dat, *.log, *.mdn, *.req -Recurse -Force | 
    Where-Object {!$_.PSIsContainer -and ((Get-Date)-$_.LastWriteTime).Days -gt 30 } | 
    Remove-Item -Force -PassThru | 
    Out-File D:\output.txt

小提示

  • 用Export-CSV时记得加-NoTypeInformation,否则CSV文件开头会多出一行类型信息,可能影响后续处理。
  • 如果只是想导出文件列表(不需要删除),直接去掉Remove-Item那一步就行,管道直接连Export-CSV。

内容的提问来源于stack exchange,提问作者Daniel Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:38:27