Мне нужно соединить два двоичных файла со сценарием *.bat в Windows.
Как я могу этого добиться?
@Joseph type может заменить только часть функциональности cat (из-за различия между двоичными и текстовыми файлами в Windows).
Перекрестный дубликат: superuser.com/q/434870/52365





Вы можете использовать copy /b так:
copy /b file1+file2 destfile
для последовательности файлов вы можете использовать подстановочные знаки, такие как "copy / b file * destfile"
для меня странно, что это не принятый ответ, учитывая очевидные проблемы с type, изложенные в комментариях к принятому ответу ... если это решение не имеет подобных недостатков, но недостаточно популярно, чтобы люди могли их заметить!
Спасибо! Работает на меня. По какой-то причине type дважды повторяет содержимое в выходном файле.
Просто используйте команду dos copy с несколькими исходными файлами и одним файлом назначения.
copy file1+file2 appendedfile
Вам может понадобиться параметр / B для двоичных файлов
Команда Windows type работает аналогично UNIX cat.
Пример 1:
type file1 file2 > file3
эквивалентно:
cat file1 file2 > file3
Пример 2:
type *.vcf > all_in_one.vcf
Эта команда объединит все видеокарты в одну.
Проблема с типом в этой ситуации заключается в том, что он добавляет ненужные заголовки файлов при вводе более одного файла, указанного в командной строке.
При указании более одного файла в командной строке введите несколько пустых строк и имя файла перед копированием содержимого файла. Попытайся :)
Ах, я не заметил, что заголовки идут в stderr. Хорошо знать.
обратите внимание, что шрифт со стрелкой (как указано выше) не работает с большими файлами (например,> 2 ГБ или 4), по крайней мере, с XP. Однако вы можете использовать команду «копировать» (см. Другой ответ).
Примечание: Echo поддерживает альтернативные потоки данных. Типа нет. (en.wikipedia.org/wiki/NTFS#Alternate_data_streams_.28ADS.29)
Еще один совет: чтобы не показывать другие выходные данные type file1 file2 > file3 2>NUL
СПАСИБО! Я просто потратил часы на устранение неполадок в Windows. Команда "type" = "cat" - это ответ. Спасибо, что поделились этим. :)
type (PowerShell) преобразовал мои текстовые файлы в UTF-16. Есть ли способ предотвратить это?
Бесстыдный плагин PowerShell (потому что я думаю, что кривая обучения - это боль, поэтому обучение чему-либо при любой возможности может помочь)
Get-Content file1,file2
Обратите внимание, что type - это псевдоним для Get-Content, поэтому, если он вам больше нравится, вы можете написать:
type file1,file2
Это работает, но собачья медлительность. Я нашел этот вопрос, сидя в ожидании, пока PowerShell объединит несколько больших видеофайлов, что занимало полчаса на файл. Я убил процесс и попробовал его с помощью cmd, используя type file1 file2 > dest, и каждый из них был выполнен за секунды.
остерегайтесь, PowerShell может повредить ваши двоичные файлы, например, '\n' может быть заменен на '\r\n'
По какой-то причине он преобразовал мои файлы в UTF-16. -Encoding UTF8 ничего не менял.
Если у вас есть контроль над машиной, на которой вы выполняете свою работу, я настоятельно рекомендую установить GnuWin32. Просто «Загрузить все» и позвольте программе wget получить все пакеты. После этого у вас будет доступ к cat, grep, find, gzip, tar, less и сотням других.
GnuWin32 - одна из первых вещей, которые я устанавливаю на новый компьютер с Windows.
Я бы порекомендовал GetGnuWin32 (для упрощения установки)
Если допустимо использование внешней утилиты, я бы предпочел busybox для Windows, который представляет собой один исполняемый файл размером ~ 600 КБ, включающий ~ 30 утилит Unix. Единственная разница в том, что нужно использовать команду "busybox cat" вместо простой "cat".
Если вы просто хотите добавить текст в конец существующего файла, вы можете использовать вертикальную черту >>. бывший:
echo new text >>existingFile.txt
Если вам нужно использовать пакетный скрипт и у вас установлен python, вот ответ полигот в пакетном режиме и на 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
Спасибо также этот ответ за вдохновение.
В выпуске Windows 10 Redstone 1 Windows добавила настоящую подсистему Linux для ядра NTOS. Я думаю, что изначально он был предназначен для поддержки приложений Android и, возможно, сценариев типа докеров. Microsoft объединилась с Canonical и добавила настоящую собственную оболочку bash. Кроме того, вы можете использовать менеджер пакетов apt, чтобы получить множество пакетов Ubuntu. Например, вы можете выполнить команду apt-get gcc для установки цепочки инструментов GCC, как если бы вы использовали Linux.
Если бы такая вещь существовала, пока я учился в университете, я думаю, что мог бы выполнять большую часть своих заданий по программированию Unix в собственной оболочке Windows bash.
Я пытаюсь снова подключиться к tar-архиву, который был разделен на сервере Linux.
И я обнаружил, что если я использую type в Windows cmd.exe, это приведет к тому, что файл будет соединен в неправильном порядке (например, type иногда сначала помещает XXXX.ad, а затем XXXX.ac, XXXX.aa и т. д.)
Итак, я нашел инструмент с именем bat в GitHub https://github.com/sharkdp/bat, который имеет сборку Windows и лучшую подсветку кода, и, что важно, он отлично работает в Windows, чтобы повторно присоединиться к tar-архиву!
Итак, я искал аналогичное решение с возможностью сохранения символов 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#, не стесняйтесь сканировать антивирусом, и исходный код будет доступен по запросу.
У команды типа Windows есть проблемы, например, с символами Unicode на границе 512 байт. Попробуйте кота Сигвина.
Ваш вопрос с названием и ваш вопрос с описанием не полностью синхронизированы. type будет лучшим ответом на вопрос заголовка, а copy / b будет лучшим ответом на вопрос описания. Если возможно, вы захотите изменить это название.