Ich versuche, die Funktionalität des catBefehls unter Unix zu replizieren .
Ich möchte Lösungen vermeiden, bei denen ich beide Dateien explizit in Variablen einlese, die Variablen miteinander verkette und dann die verkettete Variable ausschreibe.
Ich versuche, die Funktionalität des catBefehls unter Unix zu replizieren .
Ich möchte Lösungen vermeiden, bei denen ich beide Dateien explizit in Variablen einlese, die Variablen miteinander verkette und dann die verkettete Variable ausschreibe.
Antworten:
Sie können einfach verwenden cat example1.txt, example2.txt | sc examples.txt. Mit diesem Stil können Sie sicherlich auch mehr als zwei Dateien verketten. Wenn die Dateien ähnlich benannt sind, können Sie außerdem Folgendes verwenden:
cat example*.txt | sc allexamples.txt
Das catist ein Alias für Get-Contentund scist ein Alias für Set-Content.
Hinweis 1 : Seien Sie vorsichtig mit der letzteren Methode. Wenn Sie versuchen, eine Ausgabe zu erstellen examples.txt(oder eine ähnliche Methode , die dem Muster entspricht), gerät PowerShell in eine Endlosschleife! (Ich habe das gerade getestet).
Hinweis 2 : Bei der Ausgabe in eine Datei mit >bleibt die Zeichencodierung nicht erhalten! Aus diesem Grund wird die Verwendung von Set-Content( sc) empfohlen.
Set-Contenteine nationale Codepage verwendet wird (z. B. Windows-1252 für Englisch). Wenn die Quelldateien eine andere Codierung enthalten (z. B. Windows-1251 oder UTF8), müssen Sie die richtige Codierung festlegen sc file.txt -Encoding UTF8(Zahlen wie 1251 für Russisch werden seit Version 6.2 unterstützt)
Add-Contentist, dass die aggregierte Datei doppelt so lang ist, wenn Sie den Befehl zweimal ausführen. Ein guter Ersatz ist Out-File. Beispiel hier
Get-Content my.bin -Raw | Set-Content my.bin -NoNewlineändert sich nur mit my.binAusnahme der Zeitstempel. -RawBewahrt alle CR / LF-Bytes auf und -NoNewlineverhindert , dass PowerShell eigene CR / LF-Bytes hinzufügt.
Nicht verwenden >; es bringt die Zeichenkodierung durcheinander. Verwenden:
Get-Content files.* | Set-Content newfile.file
catist ein Alias für Get-Content.
ÿþdas ist , FF FEam Anfang meiner verketteten Datei bei der Verwendung >.
In cmdkö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 die PowerShell-Methode darin besteht, gc zu verwenden , ist das oben Genannte ziemlich schnell, insbesondere bei großen Dateien. Mit dem Schalter kann es auch für Nicht- ASCII- Dateien verwendet /Bwerden.
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
gcsich?
gcist ein Alias für Get-Content
Dateien in der Eingabeaufforderung zu konkatieren wäre es
type file1.txt file2.txt file3.txt > files.txt
PowerShell konvertiert den typeBefehl in Get-Content, was bedeutet, dass bei Verwendung des typeBefehls in PowerShell eine Fehlermeldung angezeigt wird, da für den Get-ContentBefehl ein Komma zwischen den Dateien erforderlich ist. Der gleiche Befehl in PowerShell wäre
Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt
Ich benutzte:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log
-Encoding ASCII -Append
Dies wurde gut angehängt. Ich habe die ASCII-Codierung hinzugefügt, um die Nullzeichen zu entfernen, die Notepad ++ ohne die explizite Codierung angezeigt hat.
Sie können so etwas tun wie:
get-content input_file1 > output_file
get-content input_file2 >> output_file
Wo >ist ein Alias für "Out-File" und >> ist ein Alias für "Out-File-Append".
Da die meisten anderen Antworten (aufgrund der Rohrleitungen) häufig eine falsche Formatierung aufweisen, ist Folgendes am sichersten:
add-content $YourMasterFile -value (get-content $SomeAdditionalFile)
Ich weiß, dass Sie vermeiden wollten, den Inhalt von $ SomeAdditionalFile in eine Variable einzulesen, aber um zum Beispiel Ihre Newline-Formatierung zu speichern, glaube ich nicht, dass es einen richtigen Weg gibt, darauf zu verzichten.
Eine Problemumgehung besteht darin, Ihre $ SomeAdditionalFile Zeile für Zeile zu durchlaufen und diese in Ihre $ YourMasterFile zu leiten. Dies ist jedoch zu ressourcenintensiv.