PowerShell脚本中Out-File无法正常工作的原因是什么?
问题原因及解决方法
核心原因
- Write-Host的输出不进入管道:Write-Host是专门用来向终端控制台输出信息的,它的内容不会流入PowerShell的管道流,所以管道后面的
Out-File根本接收不到任何数据,自然生成空文件。 - 参数位置错误:你把
-Append写在了Write-Host后面,但Write-Host没有这个参数,-Append是Out-File的参数,用来指定追加写入文件而非覆盖原有内容。
解决方法
方法1:替换Write-Host为可管道输出的方式
PowerShell中直接输出字符串默认就会将内容送入管道,也可以显式用Write-Output,两种方式都能让Out-File接收到数据:
$codec = ffprobe -i $vidfile -hide_banner -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 # 方式A:直接输出字符串(推荐,更简洁) "Processing $vidfile Codec: $codec" | Out-File -FilePath "Z:\Movies\codecs.txt" -Append # 方式B:显式使用Write-Output Write-Output "Processing $vidfile Codec: $codec" | Out-File -FilePath "Z:\Movies\codecs.txt" -Append
方法2:同时在控制台显示并写入文件
如果需要既在终端看到输出,又要写入文件,用Tee-Object可以一次完成两个操作:
$codec = ffprobe -i $vidfile -hide_banner -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "Processing $vidfile Codec: $codec" | Tee-Object -FilePath "Z:\Movies\codecs.txt" -Append
内容的提问来源于stack exchange,提问作者zBernie
相关产品推荐
相关产品推荐

