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

Adding output data to 1 text file

正如您在下面看到的,提取了文件夹中所有 .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
}

不使用重定向,而是使用 Out-File -appendAdd-Content

所以改变

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

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

我放弃了变量赋值,因为它在这个上下文中没有做任何事情。

> 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(实际上是 windows-1252ANSI 编码).

如果你不想白白循环,你可以简单地这样做

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"

您可以像这个例子一样使用添加内容:

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