将输出数据添加到1个文本文件中

时间:2016-11-14 22:54:42

标签: powershell scripting cmdlets get-childitem

如下所示,提取文件夹中所有.msg文件的内容。但是,我只能在输出content.txt中看到1 .msg内容,而不是所有的.msg文件。如何循环命令并添加到相同的.txt文件?

$output_file3 = ‘c:\outlook_files\content.txt’

# Search messages
Get-ChildItem "c:\outlook_files\msg\" -Filter *.msg | Foreach-Object {
    # Read current message content
    $content = Get-Content $_.FullName >$output_file3
}

4 个答案:

答案 0 :(得分:1)

使用Out-File -appendAdd-Content

,而不是使用重定向

所以改变

$content = Get-Content $_.FullName >$output_file3

Get-Content $_.FullName | out-file $output_file3 -append

我删除了变量赋值,因为它在此上下文中没有执行任何操作。

答案 1 :(得分:1)

> redirection operator会截断现有文件。使用追加操作:

Get-Content $_.FullName >>$output_file3
Get-Content $_.FullName | Add-Content $output_file3
Get-Content $_.FullName | Out-File $output_file3 -Append

或在ForEach-Object循环之后执行写操作:

ForEach-Object {
    Get-Content $_.FullName
} >$output_file3

ForEach-Object {
    Get-Content $_.FullName
} | Set-Content $output_file3

ForEach-Object {
    Get-Content $_.FullName
} | Out-File $output_file3

通常,您更喜欢*-ContentOut-File cmdlet而不是重定向运算符,因为它们可以让您更好地控制写入文件的内容(即编码)。 Out-FileSet-Content / Add-Content之间的主要区别在于前者默认为Unicode(精确的小端UTF-16),而后者默认为Ascii(实际上是{{ 3}} ANSI编码)。

答案 2 :(得分:0)

如果你不想要循环

,你可以做到这一点
Get-Content "c:\outlook_files\msg\\*.msg" | Out-File "c:\outlook_files\content.txt"

Get-Content "c:\outlook_files\msg\\*.msg" > "c:\outlook_files\content.txt"

答案 3 :(得分:0)

您可以使用此示例添加内容:

add-content -path "c:\test.txt" -value "$value"