Есть ли замена для кота на винде

294

Мне нужно объединить два двоичных файла с *.bat script в Windows.

Как я могу это достичь?

  • 15
    Ваш заглавный вопрос и ваш вопрос описания не полностью синхронизированы. type будет лучшим ответом на вопрос заголовка, а copy / b будет лучшим ответом на вопрос описания. Вы можете изменить это название, если это возможно.
  • 2
    type @Joseph может заменить только часть функциональности cat (из-за различия между двоичными и текстовыми файлами в Windows).
Показать ещё 1 комментарий
Теги:
scripting
command-line

10 ответов

393
Лучший ответ

Команда Windows type работает аналогично UNIX cat.

Пример 1:

type file1 file2 > file3

эквивалентно:

cat file1 file2 > file3

Пример 2:

type  *.vcf > all_in_one.vcf  

Эта команда объединит все vcards в один.

  • 1
    Проблема с типом в этой ситуации заключается в добавлении нежелательных заголовков файлов при вводе более одного файла, указанного в командной строке.
  • 2
    Если в командной строке указано более одного файла, введите перед выводом содержимого файла несколько пустых строк и имя файла. Попытайся :)
Показать ещё 6 комментариев
82

Вы можете использовать copy /b следующим образом:

copy /b file1+file2 destfile
  • 5
    для последовательности файлов вы можете использовать подстановочные знаки, такие как «copy / b file * destfile»
20

Если у вас есть контроль над машиной, где вы выполняете свою работу, я настоятельно рекомендую установить GnuWin32. Просто "Загрузить все" и пусть программа wget загрузит все пакеты. Затем вы получите доступ к cat, grep, find, gzip, tar, less и сотням других.

GnuWin32 - одна из первых вещей, которые я устанавливаю в новом окне Windows.

  • 0
    Я бы порекомендовал GetGnuWin32 (для упрощения установки)
  • 3
    Если использование внешней утилиты приемлемо, я бы предпочел busybox для Windows, который представляет собой исполняемый файл ~ 600 кБ, включающий ~ 30 утилит Unix. Единственное отличие состоит в том, что вместо простой «кошки» нужно использовать команду «busybox cat»
11

Бесстыдный плагин PowerShell (потому что я думаю, что кривая обучения - боль, поэтому обучение чему-то при любой возможности может помочь)

Get-Content file1,file2

Обратите внимание, что type является псевдонимом для Get-Content, поэтому, если вам это нравится, вы можете написать:

type file1,file2
  • 1
    Это работает, но это собака медленно. Я нашел этот вопрос, сидя в ожидании PowerShell, чтобы объединить несколько больших видеофайлов, которые занимали по полчаса на файл. Я убил процесс и попробовал его с помощью cmd, используя type file1 file2 > dest и каждый из них был сделан в считанные секунды.
3

Просто используйте команду dos copy с несколькими исходными файлами и одним целевым файлом.

copy file1 + file2 appendedfile

Вам может понадобиться опция /B для двоичных файлов

2

В выпуске Windows 10 Redstone 1 Windows добавила настоящую подсистему Linux для ядра NTOS. Я думаю, что первоначально он предназначался для поддержки приложений Android и, возможно, сценариев типа докеров. Microsoft сотрудничала с Canonical и добавила фактическую собственную оболочку bash. Кроме того, вы можете использовать менеджер пакетов apt для получения множества пакетов Ubuntu. Например, вы можете сделать apt-get gcc для установки цепочки инструментов GCC, как и в ящике Linux.

Если бы такое существо существовало, когда я учился в университете, я бы мог сделать большую часть своих назначений программирования Unix в родной оболочке Windows bash.

1

Если вы просто хотите добавить текст в конец существующего файла, вы можете использовать → pipe. например:

echo new text >>existingFile.txt
0

Поэтому я искал похожее решение с возможностью сохранения символов EOL и обнаружил, что нет никакого способа, поэтому я делаю то, что умею лучше всего, и делаю свою собственную утилиту. Это исполняемый файл cat для Windows - https://mega. пг /#! 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

Я называю его sharp-cat, так как он построен на С#, не стесняйтесь сканировать антивирусом, и исходный код будет доступен по запросу.

0

Я пытаюсь присоединиться к архиву tar, который был разбит на сервере Linux.

И я обнаружил, что если я использую type в Windows cmd.exe, это приведет к тому, что файл будет объединен в неправильном порядке (то есть type иногда сначала помещает XXXX.ad, а затем XXXX.ac, XXXX.aa и т.д.)

Итак, я нашел инструмент под названием bat в GitHub https://github.com/sharkdp/bat, который имеет сборку Windows и имеет лучшее выделение кода, и важно то, что он отлично работает на Windows, чтобы присоединиться к архиву tar!

0

Если вам нужно использовать пакетный пакет script и установить здесь python polygot ответить в пакетном режиме и 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())

Если сохранение в качестве использования join.bat будет:

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

Спасибо, этот ответ за вдохновение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню