Что такое Windows-эквивалент команды Unix cat?

203

Я хочу сделать именно то, что делает unix "cat", но на моем ПК. Существует ли простая эквивалентная команда для командной строки Windows?

В частности, я хочу создать файл из всех файлов данного типа в папке

В Unix:

cat *fna >all_fna_files.fna

(который объединяет все текстовые файлы ".fna" в один большой текстовый файл)

Kirt
источник
Ни одно из этих предложений не может принять перенаправление STDIN.
состоится
2
Powershell:cat file.txt
Каньон Колоб
Перекрестный дубликат: stackoverflow.com/q/60244/11683
GSerg

Ответы:

253

type

Он работает через command.com, cmdи PowerShell (хотя в последнем случае это псевдоним Get-Content, так и есть cat, так что вы можете использовать либо). Из статьи Википедии (выделено мое):

В вычислениях type - это команда в различных VMS. Интерпретаторы (оболочки) командной строки AmigaDOS, CP / M, DOS, OS / 2 и Microsoft Windows, такие как COMMAND.COM, cmd.exe, 4DOS / 4NT и Windows PowerShell. Используется для отображения содержимого указанных файлов. Это аналог команды Unix cat.

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
источник
6
Хороший информативный ответ, так что +1. Хотелось бы, чтобы я дал Microsoft -1, хотя для совершенно неоднозначного имени команды. type filenameзаставляет меня думать, что команда должна возвращать тип файла, а не содержимое файла!
PenguinCoder
28
Кошка на самом деле не выглядит намного лучше.
Дэвид Бойк
9
@davidboike Это намного лучше, потому что на самом деле это означает и означает то, что делает: программа cat - это стандартная утилита Unix, которая объединяет и перечисляет файлы. Название является аббревиатурой catenate, синонимом конкатенации. Статья в Википедии Можете ли вы сказать то же самое для команды MS-DOS type??
PenguinCoder
11
@PenguinCoder Кроме того type, не объединяет файлы; это просто typeих содержимое на экран. Это пример в примере, который объединяет файлы, а не typeкоманда.
Энди
22

Из командной оболочки:

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

(Но это следует из командной оболочки, использующей control-Z в качестве маркера конца файла, поэтому в некоторых случаях не подходит).

В PowerShell:

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

и вы можете контролировать (используя -Encodingпараметр) кодировку файла (которая позволяет транскодировать, используя разные кодировки для чтения и записи).

Ричард
источник
8
PowerShell псевдонимы catв Get-Contentтоже. Он предназначен для принятия многих основных команд Linux без особых изменений, если таковые имеются.
Боб
1
Боб, кроме случаев, когда задействованы переключатели и опции.
Джои
@Richard: Копировать / ba + b + c output.txt не проверяет Ctrl-Z. Оба варианта будут копировать весь файл, если в нем НЕТ ctrl-Z.
Тонни
2
Обратите внимание, что вы также можете включать подстановочные знаки, так как подстановочные знаки работают в Windows, это означает, что вы не будете испорчены списком расширений, не содержащим +, так что copy [/b] *.fna all_fna_files.fna..
Random832
если я вспомню старый тест, который я когда-то делал, используя COPY с / B для конкатенации, он проигнорирует маркеры CTRL-Z / EOF и выполнит конкатенацию правильно! но судя по копии /? вам может понадобиться сделать много / B, как это может показаться после копирования, после каждого файла src и после файла dest .. странно.
Бароп
1

Я только что использовал команду cat в DOS (Windows 7 Pro) следующим образом и успешно объединил 3 файла (log1.txt, log2.txt, log3.txt) в один файл:

cat log*.txt >> myBigLogFile.txt 

Примечание: cat log*.txt > myBigLogFile2.txtтакже предоставьте тот же результат, но он заменит предыдущий файл.

Хайди
источник
3
может быть, у вас есть GNU для Windows или Cygwin на вашем пути, или вы используете powershell, потому что cat не существует в чистой системе Windows 7. DOS больше не вещь, но большинство людей будет использовать его для ссылки на cmd.exe.
Шантева
1
Windows CMD и MS-DOS - это не одно и то же . В catcmd и DOS нет команды, только catпсевдоним в powershell
phuclv
Вы также можете использовать typeкомандуtype *.txt > file.merge
Riz