Добавление выходных данных в 1 текстовый файл

Как вы можете видеть ниже, содержимое всех MSG-файлов в папке извлекается. Тем не менее, я вижу только 1 .msg содержимого в выходной файл content.txt, а не все файлы.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 ответа

Решение

Вместо перенаправления используйте Out-File -append или же Add-Content

так измени

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

в

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

Я отбросил присвоение переменной, потому что она ничего не делает в этом контексте.

> оператор перенаправления усекает существующие файлы. Либо используйте операцию добавления:

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 Командлеты над операторами перенаправления, потому что они дают вам лучший контроль над тем, что записывается в файл (а именно, кодирование). Основное различие между Out-File а также Set-Content/Add-Content в том, что первый по умолчанию использует Unicode (точнее, UTF-16 с прямым порядком байтов), а второй - Ascii (фактически кодировка ANSI windows-1252).

Вы можете использовать добавить контент, как этот пример:

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

Вы можете сделать это просто, если вы не хотите цикл ни за что

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"
Другие вопросы по тегам