Gibt es Ersatz für Katze unter Windows


309

Ich muss zwei Binärdateien mit einem *.batSkript unter Windows verbinden.

Wie kann ich das erreichen?


15
Ihre Titelfrage und Ihre Beschreibungsfrage sind nicht vollständig synchron. Typ wäre die beste Antwort auf die Titelfrage und Kopie / b wäre die beste Antwort auf die Beschreibungsfrage. Möglicherweise möchten Sie diesen Titel nach Möglichkeit ändern.
Joseph

2
@Joseph typekann nur einen Teil der catFunktionalität ersetzen (aufgrund der Unterscheidung zwischen Binär- und Textdateien unter Windows).
JFS

Antworten:


452

Der Windows- typeBefehl funktioniert ähnlich wie UNIX cat.

Beispiel 1:

type file1 file2 > file3

ist äquivalent zu:

cat file1 file2 > file3

Beispiel 2:

type  *.vcf > all_in_one.vcf  

Dieser Befehl führt alle vcards zu einer zusammen.


1
Das Problem mit dem Typ in dieser Situation besteht darin, dass unerwünschte Dateikopfzeilen hinzugefügt werden, wenn mehr als eine in der Befehlszeile angegebene Datei eingegeben wird.
Greg Hewgill

2
Wenn Sie mehr als eine Datei in der Befehlszeile angeben, gibt type einige leere Zeilen und den Namen der Datei aus, bevor der Inhalt der Datei kopiert wird. Probieren Sie es aus :)
Greg Hewgill

3
Ah, ich hatte nicht bemerkt, dass die Header an stderr gehen. Gut zu wissen.
Greg Hewgill

1
Beachten Sie, dass der Typ mit dem Pfeil (wie oben) nicht mit großen Dateien (wie> 2 GB oder 4) funktioniert, zumindest nicht mit XP. Sie können jedoch den Befehl "Kopieren" verwenden (siehe andere Antwort).
Rogerdpack

2
Ein weiterer Tipp: Um zu vermeiden, dass andere Ausgaben type file1 file2 > file3 2>NUL
Mike T

85

Sie können copy /bwie folgt verwenden:

copy /b file1+file2 destfile

5
Für die Reihenfolge der Dateien können Sie Platzhalter wie "copy / b file * destfile"
Stalinko

Seltsam für mich, dass dies nicht die akzeptierte Antwort ist, angesichts der offensichtlichen Probleme, typedie in den Kommentaren zur akzeptierten Antwort aufgeführt sind ... es sei denn, diese Lösung hat ähnliche Nachteile, ist aber nicht populär genug, damit die Leute sie notieren können!
Jony Thrive

23

Wenn Sie die Kontrolle über den Computer haben, auf dem Sie arbeiten, empfehle ich dringend, GnuWin32 zu installieren . Einfach "Alle herunterladen" und das Wget-Programm alle Pakete abrufen lassen. Sie haben dann Zugriff auf cat, grep, find, gzip, tar, less und Hunderte anderer.

GnuWin32 ist eines der ersten Dinge, die ich auf einer neuen Windows-Box installiere.


Ich würde GetGnuWin32 empfehlen (um die Installation zu vereinfachen)
jfs

3
Wenn die Verwendung eines externen Dienstprogramms akzeptabel ist, würde ich eine Busybox für Windows bevorzugen, bei der es sich um eine einzelne Exe mit ~ 600 kB handelt, die ~ 30 Unix-Dienstprogramme enthält. Der einzige Unterschied ist, dass man den Befehl "Busybox Cat" anstelle des einfachen Befehls "Cat" verwenden sollte
Fr0sT

12

Schamloser PowerShell-Stecker (weil ich denke, dass die Lernkurve ein Schmerz ist, kann es hilfreich sein, bei jeder Gelegenheit etwas zu lehren)

Get-Content file1,file2

Beachten Sie, dass dies typeein Alias ​​für Get-Content ist. Wenn es Ihnen besser gefällt, können Sie Folgendes schreiben:

type file1,file2

1
Es funktioniert, aber es ist Hund langsam. Ich fand diese Frage, während ich darauf wartete, dass Powershell einige große Videodateien verkettete, was pro Datei eine halbe Stunde dauerte. Ich habe den Prozess abgebrochen type file1 file2 > destund mit cmd versucht und jeder war in Sekunden erledigt.
Stib


Aus irgendeinem Grund wurden meine Dateien in UTF-16 konvertiert. -Encoding UTF8hat nichts geändert.
John Dvorak

5

Verwenden Sie einfach den Befehl dos copy mit mehreren Quelldateien und einer Zieldatei.

copy file1+file2 appendedfile

Möglicherweise benötigen Sie die Option / B für Binärdateien


2

In der Redstone 1-Version von Windows 10 hat Windows ein echtes Linux-Subsystem für den NTOS-Kernel hinzugefügt. Ich denke, ursprünglich sollte es Android-Apps und möglicherweise Docker-Szenarien unterstützen. Microsoft hat sich mit Canonical zusammengetan und eine aktuelle native Bash-Shell hinzugefügt. Sie können auch den apt-Paketmanager verwenden, um viele Ubuntu-Pakete abzurufen. Sie können beispielsweise apt-get gcc ausführen, um die GCC-Toolkette wie auf einer Linux-Box zu installieren.

Wenn so etwas während meines Studiums existiert hätte, hätte ich wahrscheinlich die meisten meiner Unix-Programmieraufgaben in der nativen Windows-Bash-Shell erledigen können.


1

Wenn Sie einfach Text an das Ende der vorhandenen Datei anhängen möchten, können Sie die Pipe >> verwenden. Ex:

echo new text >>existingFile.txt

0

Wenn Sie ein Batch-Skript verwenden müssen und Python installiert haben, finden Sie hier eine Polygot- Antwort in Batch und Python:

1>2# : ^
'''
@echo off
python "%~nx0" " %~nx1" "%~nx2" "%~nx3"
exit /b
rem ^
'''
import sys
import os

sys.argv = [argv.strip() for argv in sys.argv]
if len(sys.argv) != 4:
    sys.exit(1)

_, file_one, file_two, out_file = sys.argv

for file_name in [file_one, file_two]:
    if not os.path.isfile(file_name):
        print "Can't find: {0}".format(file_name)
        sys.exit(1)

if os.path.isfile(out_file):
    print "Output file exists and will be overwritten"

with open(out_file, "wb") as out:
    with open(file_one, "rb") as f1:
        out.write(f1.read())

    with open(file_two, "rb") as f2:
        out.write(f2.read())

Wenn als join.bat gespeichert, wäre die Verwendung:

join.bat file_one.bin file_two.bin out_file.bin

Danke auch dieser Antwort für die Inspiration.


0

Ich versuche, mich wieder dem Tar-Archiv anzuschließen, das auf einem Linux-Server aufgeteilt wurde.

Und ich habe festgestellt, dass bei Verwendung typeunter Windows cmd.exedie Datei in der falschen Reihenfolge zusammengefügt wird (dh typemanchmal wird zuerst XXXX.ad und dann XXXX.ac, XXXX.aa usw. eingefügt).

Also habe ich batin GitHub https://github.com/sharkdp/bat ein Tool gefunden, das einen Windows-Build und eine bessere Code-Hervorhebung hat. Wichtig ist, dass es unter Windows gut funktioniert, um sich wieder dem Tar-Archiv anzuschließen!


0

Also suchte ich nach einer ähnlichen Lösung mit der Fähigkeit, EOL-Zeichen zu erhalten, und fand heraus, dass es keinen Weg gibt. Also mache ich das, was ich am besten kann und mache meine eigene Nützlichkeit. Dies ist eine native Katze, die für Windows ausführbar ist - https: // mega. nz / #! 6AVgwQhL! qJ1sxx-tLtpBkPIUx__iQDGKAIfmb21GHLFerhNoaWk

Usage: cat file1 file2 file3 file4 -o output.txt
-o | Specifies the next arg is the output, we must use this rather than ">>" to preserve the line endings

Ich nenne es Sharp-Cat, da es mit C # erstellt wurde. Sie können es gerne mit einem Antivirenprogramm scannen. Der Quellcode wird auf Anfrage zur Verfügung gestellt


-1

Der Windows-Befehl hat Probleme, z. B. mit Unicode-Zeichen an der 512-Byte-Grenze. Probieren Sie Cygwins Katze.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.