web-dev-qa-db-ja.com

PowerShellで2つのテキストファイルを連結するにはどうすればよいですか?

Unixで「cat」コマンドの機能を複製しようとしています。

両方のファイルを明示的に変数に読み込んで、変数を連結し、連結した変数を書き出すという解決策は避けたいと思います。

93
merlin2011

単にcat example1.txt, example2.txt | sc examples.txtを使用できます。このスタイルでも3つ以上のファイルを確実に連結できます。さらに、ファイルの名前が似ている場合は、次を使用できます。

cat example*.txt | sc allexamples.txt

catGet-Content のエイリアスであり、scSet-Content のエイリアスです。

注1:後者の方法には注意してください-examples.txt(またはパターンに一致する類似のもの)に出力しようとすると、PowerShellは無限になりますループ! (これをテストしました)。

注2>を使用してファイルに出力すると、文字エンコードが保持されません!これが、Set-Contentsc)の使用が推奨される理由です。

133
Smi

>を使用しないでください。文字エンコーディングを台無しにします。つかいます:

Get-Content files.* | Set-Content newfile.file
56
user2074686

cmdでは、次のことができます。

copy one.txt+two.txt+three.txt four.txt

PowerShellでは、これは次のようになります。

cmd /c copy one.txt+two.txt+three.txt four.txt

PowerShellの方法では gc を使用しますが、特に大きなファイルの場合、上記の方法は非常に高速です。また、/Bスイッチを使用して、- ASCII 以外のファイルでも使用できます。

13
manojlds

Add-Content コマンドレットを使用できます。最初のファイルのコンテンツを取得しないので、他のソリューションよりも少し速いかもしれません。

gc .\file2.txt| Add-Content -Path .\file1.txt
11
mjsr

コマンドプロンプトでファイルを連結するには

type file1.txt file2.txt file3.txt > files.txt

PowershellはtypeコマンドをGet-Contentに変換します。つまり、get-Contentコマンドではファイルをコンマで区切る必要があるため、powershellでtypeコマンドを使用するとエラーが発生します。 PowerShellの同じコマンドは次のようになります

Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt

4
Brian Kimball

特定のパラメーター(日時など)でファイルを注文する必要がある場合:

gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log
4
Roman O

私が使用した:

Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log 
-Encoding ASCII -Append

これは罰金を追加しました。 ASCIIエンコードを追加して、明示的なエンコードなしでNotepad ++が表示していたヌル文字を削除しました。

3
Phoenix14830

他のほとんどの応答は、多くの場合(パイピングが原因で)フォーマットが間違っているため、最も安全なことは次のとおりです。

add-content $YourMasterFile -value (get-content $SomeAdditionalFile)

$ SomeAdditionalFileのコンテンツを変数に読み込まないようにしたかったのですが、たとえば改行の書式設定を保存するために、適切な方法がないとは思いません。

回避策は、$ SomeAdditionalFileを1行ずつループし、$ YourMasterFileにパイプすることです。ただし、これは過度にリソースを消費します。

2
Kamaradski

次のようなことができます:

get-content input_file1 > output_file
get-content input_file2 >> output_file

ここで、>は「out-file」のエイリアスであり、>>は「out-file -append」のエイリアスです。

1
vlad-ardelean

「Powershellの方法」は次のようになります。

set-content destination.log -value (get-content c:\FileToAppend_*.log )
0
dvjz