如下所示,提取文件夹中所有.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
}
答案 0 :(得分:1)
使用Out-File -append
或Add-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
通常,您更喜欢*-Content
或Out-File
cmdlet而不是重定向运算符,因为它们可以让您更好地控制写入文件的内容(即编码)。 Out-File
和Set-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"