349 Stimmen

Gibt es einen Ersatz für cat unter Windows?

Ich muss zwei Binärdateien mit einer *.bat Skript unter Windows.

Wie kann ich das erreichen?

2voto

sam msft Punkte 433

In der Redstone 1-Version von Windows 10 hat Windows ein echtes Linux-Subsystem für den NTOS-Kernel hinzugefügt. Ich denke, dass es ursprünglich dazu gedacht war, Android-Apps und vielleicht Docker-Szenarien zu unterstützen. Microsoft hat sich mit Canonical zusammengetan und eine echte native Bash-Shell hinzugefügt. Sie können auch den apt-Paketmanager verwenden, um viele Ubuntu-Pakete zu erhalten. Zum Beispiel können Sie apt-get gcc verwenden, um die GCC-Werkzeugkette zu installieren, wie Sie es auf einer Linux-Box tun würden.

Hätte es so etwas zu meiner Studienzeit gegeben, hätte ich wohl die meisten meiner Unix-Programmieraufgaben in der nativen Windows-Bash-Shell erledigen können.

1voto

Jahmic Punkte 10477

Wenn Sie einfach nur Text an das Ende einer bestehenden Datei anhängen wollen, können Sie die Pipe >> verwenden. z.B:

echo new text >>existingFile.txt

1voto

Ricky Divjakovski Punkte 374

Also suchte ich nach einer ähnlichen Lösung mit der Fähigkeit, EOL-Zeichen zu erhalten, und fand heraus, dass es keine Möglichkeit gab, also tat ich, was ich am besten kann, und erstellte mein eigenes Programm Dies ist eine native ausführbare Datei für Windows - 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 Antivirus scannen und der Quellcode wird auf Anfrage zur Verfügung gestellt

0voto

Noelkd Punkte 7362

Wenn Sie ein Batch-Skript verwenden müssen und Python installiert haben, finden Sie hier ein 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 die Datei join.bat gespeichert wird, wird sie wie folgt verwendet:

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

Danke auch diese Antwort für die Inspiration.

0voto

user42391 Punkte 11

Der Windows-Befehl type hat Probleme, zum Beispiel mit Unicode-Zeichen an der 512-Byte-Grenze. Versuchen Sie Cygwins cat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X