2016-11-14 13 views
0

以下に示すように、フォルダ内のすべての.msgファイルの内容が抽出されます。しかし、出力されるcontent.txtには1つの.msgコンテンツのみが表示され、すべての.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-ヘルプ'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は、既存のファイルを切り捨てます。追加操作を使用するか:

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コマンドレットを好む:ForEach-Objectループの後

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

または書き込み操作を行うとファイルに書かれているもの(つまり、エンコーディング)を上書きします。 Out-FileSet-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" 
関連する問題