2016-11-14 7 views
0

Как вы можете видеть ниже, извлекается содержимое из всех файлов .msg в папке. Тем не менее, я могу видеть только 1 .msg-контент в выходном файле content.txt, а не во всех файлах .msg. Как я могу закодировать команду и добавить в тот же .txt-файл?Добавление выходных данных в 1 текстовый файл

$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 
} 
+1

'Get-Help 'about_Redirection' -ShowWindow' – JosefZ

ответ

1

Вместо того, чтобы использовать переназначение, используйте Out-File -append или Add-Content

так изменить

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

в

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

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

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

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" 
0

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

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