Co to jest Windowsowy odpowiednik uniksowego polecenia cat?

201

Chcę robić dokładnie to, co robi uniksowy „cat”, ale na moim komputerze. Czy istnieje proste równoważne polecenie dla wiersza poleceń systemu Windows?

W szczególności chcę utworzyć plik ze wszystkich plików danego typu w folderze

W Uniksie:

cat *fna >all_fna_files.fna

(który łączy wszystkie pliki tekstowe „.fna” w jeden duży plik tekstowy)

Kirt
źródło
Żadna z tych sugestii nie może zaakceptować przekierowania STDIN.
będzie
2
PowerShell:cat file.txt
Kolob Canyon
Duplikat krzyżowy: stackoverflow.com/q/60244/11683
GSerg

Odpowiedzi:

251

type

To działa w poprzek command.com, cmdi PowerShell (choć w tym ostatnim jest aliasem Get-Content, taki jest cat, więc można użyć albo). Z artykułu w Wikipedii (moje podkreślenie):

W informatyce typ jest poleceniem w różnych VMS. AmigaDOS, CP / M, DOS, OS / 2 i Microsoft Windows interpretery wiersza poleceń (powłoki), takie jak COMMAND.COM, cmd.exe, 4DOS / 4NT i Windows PowerShell. Służy do wyświetlania zawartości określonych plików. Jest to analogiczne do komendy cat systemu Unix.

C:\>echo hi > a.txt
C:\>echo bye > b.txt
C:\>type a.txt b.txt > c.txt
C:\>type c.txt
hi
bye
ckhan
źródło
6
Dobra odpowiedź informacyjna, więc +1. Żałuję, że nie mogę dać Microsoftowi -1 za całkowicie niejednoznaczną nazwę polecenia. type filenamesprawia, że ​​myślę, że polecenie powinno zwrócić typ pliku, a nie jego zawartość!
PenguinCoder
28
Kot naprawdę nie wydaje się znacznie lepszy.
David Boike,
9
@davidboike Jest znacznie lepiej, ponieważ w rzeczywistości oznacza i oznacza to, co robi: Program cat jest standardowym narzędziem uniksowym, które łączy i wyświetla pliki. Nazwa jest skrótem catenate, synonimem konkatenatu. Artykuł w Wikipedii Czy możesz powiedzieć to samo o poleceniu MS-DOS type?
PenguinCoder
11
@PenguinCoder Wyjątkiem typenie jest łączenie plików; to tylko typeich zawartość na ekranie. To potokowanie w tym przykładzie faktycznie łączy pliki, a nie typepolecenie.
Andy,
22

Z powłoki poleceń:

copy a.txt + b.txt + c.txt output.txt

(Ale wynika to z użycia powłoki shell-Z jako znacznika końca pliku, więc w niektórych przypadkach nie jest to odpowiednie).

W PowerShell:

get-content a.txt,b.txt,c.txt | out-file output.txt

i możesz kontrolować (używając -Encodingparametru) kodowanie pliku (co pozwala na transkodowanie przy użyciu innego kodowania dla odczytu i zapisu).

Richard
źródło
8
Aliasy PowerShell catdo Get-Contenttoo. Został zaprojektowany tak, aby akceptować wiele podstawowych poleceń Linuksa bez większych modyfikacji, jeśli w ogóle.
Bob
1
Bob, chyba że w grę wchodzą przełączniki i opcje.
Joey,
@ Richard: Copy / ba + b + c output.txt nie sprawdza Ctrl-Z. Oba warianty skopiują cały plik, jeśli w pliku nie ma Ctrl-Z.
Tonny
2
Pamiętaj, że możesz także dołączyć symbole wieloznaczne, sposób działania symboli wieloznacznych w systemie Windows oznacza, że ​​nie zostaniesz pomieszany z listą rozszerzeń niezawierającą +, więc copy [/b] *.fna all_fna_files.fna..
Random832
jeśli przypomnę sobie stary test, który kiedyś zrobiłem, użycie KOPIUJ z / B do konkatenacji, zignoruje znaczniki CTRL-Z / EOF i poprawnie wykonam konkatenację! ale sądząc po kopii /? być może będziesz musiał zrobić dużo / B, jakby się to wydawało po kopiowaniu, po każdym pliku src i po pliku docelowym ... dziwne.
barlop
1

Właśnie użyłem polecenia cat w DOS (Windows 7 Pro) w następujący sposób i z powodzeniem połączyłem 3 pliki (log1.txt, log2.txt, log3.txt) w jeden plik:

cat log*.txt >> myBigLogFile.txt 

Uwaga: cat log*.txt > myBigLogFile2.txtpodaj również ten sam wynik, ale zastąpi on poprzedni plik.

Heidi
źródło
3
może masz GNU dla Windows lub Cygwin na swojej drodze, lub używasz PowerShell, ponieważ cat nie istnieje na czystym systemie Windows 7. DOS nie jest już rzeczą, ale większość ludzi użyłaby go w odniesieniu do cmd.exe.
Shanteva
1
Windows CMD i MS-DOS to nie to samo . W catcmd i DOS nie ma komendy, tylko catalias w PowerShell
phuclv
możesz także użyć typepoleceniatype *.txt > file.merge
Riz