Ich versuche, die Funktionalität des Befehls "cat" in Unix zu replizieren.
Ich möchte Lösungen vermeiden, bei denen ich beide Dateien explizit in Variablen einlese, die Variablen miteinander verkettet und dann die verkettete Variable ausschreibe.
Sie können einfach cat example1.txt, example2.txt | sc examples.txt
Verwenden. Mit diesem Stil können Sie sicher auch mehr als zwei Dateien verketten. Wenn die Dateien einen ähnlichen Namen haben, können Sie außerdem Folgendes verwenden:
cat example*.txt | sc allexamples.txt
Das cat
ist ein Alias für Get-Content
, und sc
ist ein Alias für Set-Content
.
Hinweis 1 : Gehen Sie bei der letzteren Methode vorsichtig vor - wenn Sie versuchen, eine Ausgabe auf examples.txt
(Oder einer ähnlichen Methode, die dem Muster entspricht), PowerShell, durchzuführen gerät in eine Endlosschleife! (Ich habe das gerade getestet).
Hinweis 2 : Bei der Ausgabe in eine Datei mit >
Bleibt die Zeichenkodierung nicht erhalten! Aus diesem Grund wird die Verwendung von Set-Content
(sc
) empfohlen.
Verwende nicht >
; es bringt die Zeichenkodierung durcheinander. Verwenden:
Get-Content files.* | Set-Content newfile.file
In cmd
können Sie dies tun:
copy one.txt+two.txt+three.txt four.txt
In PowerShell wäre dies:
cmd /c copy one.txt+two.txt+three.txt four.txt
Während der PowerShell-Weg wäre, gc zu verwenden, wird das oben Genannte ziemlich schnell sein, insbesondere für große Dateien. Und es kann auch für nicht - ASCII Dateien verwendet werden, indem /B
Schalter.
Sie können das Cmdlet Add-Content verwenden. Vielleicht ist es etwas schneller als die anderen Lösungen, weil ich den Inhalt der ersten Datei nicht abrufe.
gc .\file2.txt| Add-Content -Path .\file1.txt
Dateien in der Eingabeaufforderung zu verketten wäre es
type file1.txt file2.txt file3.txt > files.txt
Powershell konvertiert den Befehl "type" in "Get-Content". Dies bedeutet, dass bei Verwendung des Befehls "type" in Powershell ein Fehler auftritt, da für den Befehl "Get-Content" ein Komma zwischen den Dateien erforderlich ist. Das gleiche Kommando in Powershell wäre
Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt
Wenn Sie die Dateien nach bestimmten Parametern (z. B. Datum und Uhrzeit) bestellen müssen:
gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log
Ich benutzte:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log
-Encoding ASCII -Append
Dies fügte gut. Ich habe die ASCII Codierung hinzugefügt, um die Nullzeichen zu entfernen, die Notepad ++ ohne die explizite Codierung angezeigt hat.
Da bei den meisten anderen Antworten die Formatierung häufig falsch ist (aufgrund der Pipe), ist Folgendes am sichersten:
add-content $YourMasterFile -value (get-content $SomeAdditionalFile)
Ich weiß, dass Sie vermeiden wollten, den Inhalt von $ SomeAdditionalFile in eine Variable zu lesen, aber um zum Beispiel Ihre Zeilenumbruch-Formatierung zu speichern, denke ich, dass es keinen richtigen Weg gibt, ohne den Sie dies tun können.
Eine Problemumgehung wäre, Ihre $ SomeAdditionalFile zeilenweise zu durchlaufen und diese in Ihre $ YourMasterFile zu leiten. Dies ist jedoch zu ressourcenintensiv.
Sie können etwas tun wie:
get-content input_file1 > output_file
get-content input_file2 >> output_file
Woher >
ist ein Alias für "out-file" und >> ist ein Alias für "out-file-append".
Ich denke, der "Powershell-Weg" könnte sein:
set-content destination.log -value (get-content c:\FileToAppend_*.log )