2017-10-09 3 views
0

私は一緒にマージしたいディレクトリにtxtファイルのセットを持っています。次のようにすべてのTXTファイルのファイル名の末尾に列が追加された1つのファイルにディレクトリ内のTXTファイルを結合します。

内容が同じ形式である:

 
IPAddress Description    DNSDomain 
--------- -----------    --------- 
{192.168.1.2} Microsoft Hyper-V Network Adapter  
{192.168.1.30} Microsoft Hyper-V Network Adapter #2 

私はall.txtと呼ばれる1つのtxtファイルへのすべてのTXTファイルを組み合わせた以下のコードを持っています。

copy *.txt all.txt 

このall.txtから、どの行がどのtxtファイルから来たのかわかりません。任意のコードの任意のアイデアは、ファイル名を行に由来する末尾のtxtファイルに追加の列を追加するだろうか?

+0

Format-Table/Out-Stringでデータを変更していない場合は、それらのファイルを生成したスクリプトでサーバー名のプロパティを追加できます。 (そしてそれらをすべて1つのCSVに入れます)。可能な場合は、そのスクリプトを編集して、適切なデータを出力できるようにするか、データを簡単に処理できるように編集してください。 – TessellatingHeckler

+0

これは表示される出力ファイルを生成するpowershellです。 Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled = TRUE -ComputerName SERVERNAMEHERE | Format-Table -Property IPAddress、説明、DNSDomain | Out-File c:\ temp \ server.txt – user3290171

+0

ファイル名の列を追加する必要はありません。 'all.txt'の全内容はワイルドカードパターン' * .txt'で列挙された最後のファイルから来ます。なぜなら、 'copy * .txt all.txt'はあなたが思うように動作しないからです。 –

答えて

0

上記のコメントに従って、Format-Tableの出力をテキストファイルに入れました。 Format-Table視覚的にはになることがありますこれを行うことで、データを扱うことが難しくなりました。

Get-WMIObjectコマンドレットの結果からいくつかのプロパティを使用する場合は、Select-Objectを使用します(ここでの使用では、目的のプロパティのデータを効果的にフィルタリングします)。

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName SERVERNAMEHERE | 
    Select-Object PSComputerName, IPAddress, Description, DNSDomain | 
    Export-Csv 'C:\temp\server.csv' 

注我々はPScomputerNameを含めることができました。代わりに、単純なファイルにテキストを書き込むことの

、あなたは、構造化されたファイル(つまり、CSV)に書き込むことで、データを表形式的な性質を保持することができますプロパティを使用して、必要なデータを追加することができます。

生データを取得するのはそれほどです。あなたはすべてのCSVデータを読み込むと、再びそれを書くことができる一つの方法は、次のようになります。

私たちは延々と同じファイルに/読み取りと書き込みのフォームを避けるために、最初のコマンドレットでは、出力ファイルを除外
Get-ChildItem *.csv -Exclude all.csv | 
    Foreach-Object {Import-Csv $_} | 
    Export-Csv all.csv 

注意。

データを再度収集する贅沢がない場合は、ファイルを一緒にスプールする必要があります。ファイルを一緒にスプーリングは、このように、Get-Contentで何かをやっている:

$files = Get-ChildItem *.txt 

foreach($file in $files) { 
    $lines = Get-Content $file 
    foreach($line in $lines) { 
     "$line $($file.Name)" | Out-File all.txt -Append 
    } 
} 

あなたのケースでは
Get-ChildItem *.txt -Exclude all.txt | 
    Foreach-Object {Get-Content $_ -Raw} | 
    Out-File all.txt 

、あなたがファイルにライン・バイ・ラインを処理する必要があるとして、トリッカー各行を、サフィックスたかったです

関連する問題