Есть ли замена для кота на винде - PullRequest
288 голосов
/ 13 сентября 2008

Мне нужно объединить два двоичных файла с помощью скрипта *.bat в Windows.

Как мне этого добиться?

Ответы [ 10 ]

432 голосов
/ 13 сентября 2008

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

Пример 1:

type file1 file2 > file3

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

cat file1 file2 > file3

Пример 2:

type  *.vcf > all_in_one.vcf  

Эта команда объединит все видеокарты в одну.

80 голосов
/ 13 сентября 2008

Вы можете использовать copy /b так:

copy /b file1+file2 destfile
22 голосов
/ 13 сентября 2008

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

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

11 голосов
/ 13 сентября 2008

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

Get-Content file1,file2

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

type file1,file2
3 голосов
/ 13 сентября 2008

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

копировать файл1 + файл2 appendedfile

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

2 голосов
/ 17 мая 2016

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

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

1 голос
/ 30 мая 2014

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

echo new text >>existingFile.txt
0 голосов
/ 13 января 2019

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

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

0 голосов
/ 10 ноября 2018

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

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

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

0 голосов
/ 15 октября 2014

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...