Czy istnieje zamiennik dla kota w systemie Windows

309

Muszę połączyć dwa pliki binarne za pomocą *.batskryptu w systemie Windows.

Jak mogę to osiągnąć?

Artem Tichomirow
źródło
15
Twoje pytanie tytułowe i pytanie opisowe nie są całkowicie zsynchronizowane. typ będzie najlepszą odpowiedzią na pytanie tytułowe, a copy / b będzie najlepszą odpowiedzią na pytanie opisowe. Jeśli to możliwe, możesz zmienić ten tytuł.
Joseph
2
@Joseph typemoże zastąpić tylko część catfunkcjonalności (ze względu na rozróżnienie między plikami binarnymi i tekstowymi w systemie Windows).
jfs
Duplikat krzyżowy: superuser.com/q/434870/52365
GSerg

Odpowiedzi:

452

typePolecenie systemu Windows działa podobnie do systemu UNIX cat.

Przykład 1:

type file1 file2 > file3

odpowiada:

cat file1 file2 > file3

Przykład 2:

type  *.vcf > all_in_one.vcf  

To polecenie połączy wszystkie vCard w jedną.

Nathan Jones
źródło
1
Problem z typem w tej sytuacji polega na tym, że dodaje on niepożądane nagłówki plików podczas wpisywania więcej niż jednego pliku określonego w wierszu polecenia.
Greg Hewgill,
2
Podając więcej niż jeden plik w wierszu poleceń, wpisz kilka pustych wierszy i nazwę pliku przed skopiowaniem zawartości pliku. Spróbuj :)
Greg Hewgill,
3
Ach, nie zauważyłem, że nagłówki idą do stderr. Dobrze wiedzieć.
Greg Hewgill,
1
zwróć uwagę, że typ ze strzałką (jak wyżej) nie działa z dużymi plikami (jak> 2 GB lub 4), przynajmniej z XP. Możesz jednak użyć polecenia „kopiuj” (patrz inna odpowiedź).
rogerdpack
2
Kolejna wskazówka: aby uniknąć pokazywania innych wynikówtype file1 file2 > file3 2>NUL
Mike T
85

Możesz użyć w copy /bten sposób:

copy /b file1+file2 destfile
Greg Hewgill
źródło
5
do sekwencji plików można używać symboli wieloznacznych, takich jak „kopia / plik b * destfile”
Stalinko
dziwne dla mnie, że to nie jest zaakceptowana odpowiedź, biorąc pod uwagę oczywiste problemy z typeprzedstawionymi w komentarzach do przyjętej odpowiedzi ... chyba że to rozwiązanie ma podobne wady, ale nie jest wystarczająco popularne, aby ludzie mogli je zauważyć!
Jony Thrive
23

Jeśli masz kontrolę nad maszyną, w której pracujesz, zdecydowanie polecam zainstalowanie GnuWin32 . Po prostu „Pobierz wszystko” i pozwól programowi wget pobrać wszystkie pakiety. Będziesz wtedy mieć dostęp do cat, grep, find, gzip, tar, less i setek innych.

GnuWin32 to jedna z pierwszych rzeczy, które instaluję na nowym systemie Windows.

David Citron
źródło
Poleciłbym GetGnuWin32 (w celu uproszczenia instalacji)
jfs
3
Jeśli użycie zewnętrznego narzędzia jest dopuszczalne, wolałbym busybox dla Windows, który jest pojedynczym plikiem o wielkości ~ 600 kB zawierającym ~ 30 narzędzi uniksowych. Jedyną różnicą jest to, że należy użyć polecenia „busybox cat” zamiast prostego „cat”
Fr0sT
12

Bezwstydna wtyczka PowerShell (ponieważ myślę, że krzywa uczenia się jest uciążliwa, więc nauczanie czegoś przy każdej okazji może pomóc)

Get-Content file1,file2

Pamiętaj, że typejest to alias dla Get-Content, więc jeśli bardziej ci się spodoba, możesz napisać:

type file1,file2
Jay Bazuzi
źródło
1
Działa, ale jest wolny dla psów. Znalazłem to pytanie, siedząc w oczekiwaniu na połączenie programu PowerShell z dużymi plikami wideo, co zajmowało pół godziny na plik. Zabiłem proces i wypróbowałem go za pomocą polecenia cmd, type file1 file2 > desta każdy z nich wykonano w kilka sekund.
stib
Z jakiegoś powodu przekonwertował moje pliki na UTF-16. -Encoding UTF8nic nie zmieniłem.
John Dvorak,
5

Wystarczy użyć polecenia dos copy z wieloma plikami źródłowymi i jednym plikiem docelowym.

copy file1+file2 appendedfile

Może być potrzebna opcja / B dla plików binarnych

Szymon
źródło
2

W wydaniu Redstone 1 systemu Windows 10 system Windows dodał prawdziwy podsystem Linux dla jądra NTOS. Myślę, że pierwotnie miał on obsługiwać aplikacje na Androida, a może scenariusze typu dokerów. Microsoft współpracował z Canonical i dodał prawdziwą natywną powłokę bash. Możesz także użyć menedżera pakietów apt, aby uzyskać wiele pakietów Ubuntu. Na przykład możesz zrobić apt-get gcc, aby zainstalować łańcuch narzędzi GCC, tak jak na Linux-ie.

Gdyby coś takiego istniało podczas studiów, myślę, że mógłbym wykonać większość moich zadań związanych z programowaniem w Uniksie w natywnej powłoce bash Windows.

sam msft
źródło
1

Jeśli chcesz po prostu dołączyć tekst na końcu istniejącego pliku, możesz użyć >> potoku. dawny:

echo new text >>existingFile.txt
Jahmic
źródło
0

Jeśli musisz użyć skryptu wsadowego i zainstalować tutaj python, odpowiedzią jest policz w wersji wsadowej i 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())

Jeśli zostanie zapisany jako join.bat, użycie:

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

Dzięki też ta odpowiedź za inspirację.

Noelkd
źródło
0

Próbuję ponownie dołączyć do archiwum tar, które zostało podzielone na serwer Linux.

I znalazłem, że jeśli używam typew systemie Windows cmd.exe, spowoduje to, że plik zostanie połączony w niewłaściwej kolejności (tj. typeCzasami najpierw umieści XXXX.ad, a następnie XXXX.ac, XXXX.aa itp.)

Znalazłem więc narzędzie o nazwie batGitHub https://github.com/sharkdp/bat, które ma kompilację Windows i ma lepsze podświetlenie kodu, a ważne jest to, że działa dobrze w Windows, aby ponownie dołączyć do archiwum tar!

Aaron Xu
źródło
0

Szukałem więc podobnego rozwiązania z możliwością zachowania znaków EOL i odkryłem, że nie ma sposobu, więc robię to, co robię najlepiej i robię własną użyteczność. Jest to natywny plik wykonywalny kota dla systemu 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

Nazywam go sharp-cat, ponieważ jest zbudowany w języku C #, możesz skanować za pomocą programu antywirusowego, a kod źródłowy zostanie udostępniony na żądanie

Ricky Divjakovski
źródło
-1

Komenda typu Windows ma problemy, na przykład ze znakami Unicode na granicy 512 bajtów. Wypróbuj kota Cygwina.

użytkownik42391
źródło