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ąć?


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ą.


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

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.


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

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


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.


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

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ę.


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!


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


-1

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.