Unixで「cat」コマンドの機能を複製しようとしています。
両方のファイルを明示的に変数に読み込んで、変数を連結し、連結した変数を書き出すという解決策は避けたいと思います。
単にcat example1.txt, example2.txt | sc examples.txt
を使用できます。このスタイルでも3つ以上のファイルを確実に連結できます。さらに、ファイルの名前が似ている場合は、次を使用できます。
cat example*.txt | sc allexamples.txt
cat
は Get-Content
のエイリアスであり、sc
は Set-Content
のエイリアスです。
注1:後者の方法には注意してください-examples.txt
(またはパターンに一致する類似のもの)に出力しようとすると、PowerShellは無限になりますループ! (これをテストしました)。
注2:>
を使用してファイルに出力すると、文字エンコードが保持されません!これが、Set-Content
(sc
)の使用が推奨される理由です。
>
を使用しないでください。文字エンコーディングを台無しにします。つかいます:
Get-Content files.* | Set-Content newfile.file
Add-Content コマンドレットを使用できます。最初のファイルのコンテンツを取得しないので、他のソリューションよりも少し速いかもしれません。
gc .\file2.txt| Add-Content -Path .\file1.txt
コマンドプロンプトでファイルを連結するには
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
特定のパラメーター(日時など)でファイルを注文する必要がある場合:
gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log
私が使用した:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log
-Encoding ASCII -Append
これは罰金を追加しました。 ASCIIエンコードを追加して、明示的なエンコードなしでNotepad ++が表示していたヌル文字を削除しました。
他のほとんどの応答は、多くの場合(パイピングが原因で)フォーマットが間違っているため、最も安全なことは次のとおりです。
add-content $YourMasterFile -value (get-content $SomeAdditionalFile)
$ SomeAdditionalFileのコンテンツを変数に読み込まないようにしたかったのですが、たとえば改行の書式設定を保存するために、適切な方法がないとは思いません。
回避策は、$ SomeAdditionalFileを1行ずつループし、$ YourMasterFileにパイプすることです。ただし、これは過度にリソースを消費します。
次のようなことができます:
get-content input_file1 > output_file
get-content input_file2 >> output_file
ここで、>
は「out-file」のエイリアスであり、>>は「out-file -append」のエイリアスです。
「Powershellの方法」は次のようになります。
set-content destination.log -value (get-content c:\FileToAppend_*.log )