Вопрос или проблема
Я хочу сделать в точности то, что делает unix “cat”, но на моем ПК. Есть ли простой эквивалентный командный для командной строки Windows?
Конкретно я хочу создать файл из всех файлов данного типа в папке
В Unix:
cat *fna >all_fna_files.fna
(который объединяет все текстовые файлы с расширением “.fna” в один большой текстовый файл)
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. Она используется для отображения содержимого указанных файлов. Она аналогична команде cat в 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
Из командной оболочки:
copy a.txt + b.txt + c.txt output.txt
(Но это следует за использованием командной оболочки контрольного символа Z как маркера конца файла, поэтому не подходит в некоторых случаях).
В PowerShell:
get-content a.txt,b.txt,c.txt | out-file output.txt
и вы можете контролировать (используя параметр -Encoding
) кодировку файла (что позволяет проводить транскодирование, используя разные кодировки для чтения и записи).
Я только что использовал команду cat в DOS (Windows 7 Pro) следующим образом и успешно объединил 3 файла (log1.txt, log2.txt, log3.txt) в один файл:
cat log*.txt >> myBigLogFile.txt
Примечание: cat log*.txt > myBigLogFile2.txt
также предоставляет тот же результат, но он перезапишет предыдущий файл.
Если вы хотите сделать
cat >NewTextFile.txt
чтобы сохранить буфер обмена в текстовый файл в Windows (как я наткнулся на этот вопрос), вы можете сделать
copy con: NewTextFile.txt
А затем CTRL+V.
Ответ или решение
Вопрос о том, как в Windows выполнить эквивалент команды Unix cat
, важен для пользователей, переходящих с Unix-систем на Windows или работающих в межплатформенной среде. Команда cat
в Unix объединяет и выводит содержимое текстовых файлов, и часто используется для создания одного файла из нескольких. Рассмотрим различные способы достижения той же цели в Windows.
Использование команды type
в Windows:
Команда type
является наиболее близким аналогом Unix-команды cat
в Windows и доступна как в стандартной командной строке, так и в PowerShell.
Пример:
C:\>type *.fna > all_fna_files.fna
Эта команда объединяет все файлы с расширением .fna
в текущем каталоге в один файл all_fna_files.fna
.
Команда copy
в командной строке:
Другой метод заключается в использовании команды copy
для объединения файлов. Однако нужно учитывать, что copy
использует маркер конца файла (EOF), что может быть нежелательно в некоторых случаях.
Пример:
C:\>copy /b *.fna all_fna_files.fna
Аргумент /b
указывает на бинарный режим копирования, что позволяет избежать потенциальных проблем с EOF.
Использование PowerShell:
PowerShell предлагает расширенные возможностей обработки текстовых файлов с помощью команды Get-Content
, которая имеет алиас cat
. Это позволяет использовать знакомый синтаксис из Unix.
Пример:
Get-Content *.fna | Out-File -FilePath all_fna_files.fna -Encoding UTF8
Здесь Out-File
позволяет указать кодировку результирующего файла, что может быть полезно для обеспечения совместимости с другими системами или программами.
Заключение
Существует несколько подходов к выполнению задачи объединения файлов в Windows, аналогичных команде cat
в Unix. Выбор подходящего метода зависит от требований к обработке текста и особенностей используемой среды. Использование команды type
в командной строке или Get-Content
в PowerShell позволяет достичь цели с минимальными изменениями привычного рабочего процесса.