Чи є заміна кота в Windows


309

Мені потрібно з'єднати два двійкові файли з a *.bat скриптом у Windows.

Як я можу цього досягти?


15
Ваше заголовкове запитання та ваше опис не повністю синхронізовані. тип буде найкращою відповіддю на запитання щодо заголовка, а копія / b - найкращою відповіддю на питання опису. Ви, можливо, захочете змінити цю назву.
Йосип

2
@Joseph typeможе замінити лише частину catфункціональних можливостей (через розрізнення бінарних та текстових файлів у Windows).
jfs

Перехресний дублікат: superuser.com/q/434870/52365
GSerg

Відповіді:


452

typeКоманда Windows працює аналогічно UNIX cat.

Приклад 1:

type file1 file2 > file3

еквівалентно:

cat file1 file2 > file3

Приклад 2:

type  *.vcf > all_in_one.vcf  

Ця команда об'єднає всі візитки в одну.


1
Проблема з типом у цій ситуації полягає в тому, що він додає небажані заголовки файлів під час введення більше одного файлу, вказаного в командному рядку.
Грег Хьюгілл

2
Вказуючи більше одного файлу в командному рядку, перед тим, як скопіювати вміст файлу, введіть декілька порожніх рядків та ім'я файлу. Спробуйте :)
Грег Х'югілл,

3
Ах, я не помічав, що заголовки йдуть до більш жорстких. Добре знати.
Грег Х'югілл

1
зауважте, що тип зі стрілкою (як зазначено вище) не працює з великими файлами (наприклад,> 2 Гб або 4), принаймні з XP. Однак ви можете скористатися командою "копіювати" (див. Іншу відповідь).
rogerdpack

2
Ще одна порада: щоб не показувати будь-який інший результатtype file1 file2 > file3 2>NUL
Майк Т

85

Ви можете використовувати copy /bтак:

copy /b file1+file2 destfile

5
для послідовності файлів ви можете використовувати підмітні символи типу "copy / b file * destfile"
Сталінко

мені дивно, що це не прийнята відповідь, враховуючи очевидні питання, typeвикладені в коментарях до прийнятої відповіді ... якщо тільки це рішення не має подібних недоліків, але не є досить популярним, щоб люди могли їх відзначити!
Джоні процвітає

23

Якщо у вас є контроль над машиною, де ви виконуєте свою роботу, настійно рекомендую встановити GnuWin32 . Просто "Завантажте всі" і дозвольте програмі wget отримати всі пакунки. Тоді ви отримаєте доступ до кота, грепу, знахідки, gzip, дьогтю, менше та сотні інших.

GnuWin32 - це одне з перших речей, які я встановлюю на новій вікні Windows.


Я б порекомендував GetGnuWin32 (для спрощення встановлення)
jfs

3
Якщо використання зовнішньої утиліти прийнятне, я б вважав зайнятим для Windows, який є єдиним ~ 600 кБ exe, що включає ~ 30 утилітів Unix. Єдина відмінність полягає в тому, що слід використовувати команду "
зайнятий

12

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

Get-Content file1,file2

Зауважте, що typeце псевдонім для Get-Content, тому якщо вам це більше подобається, ви можете написати:

type file1,file2

1
Це працює, але це собака повільно. Я знайшов це запитання, сидячи в очікуванні, коли панчейн зможе об'єднати кілька великих відеофайлів, що займає півгодини на файл. Я вбив процес і спробував його з використанням cmd, type file1 file2 > destі кожен був виконаний за секунди.
стиб


Він чомусь перетворив мої файли в UTF-16. -Encoding UTF8нічого не змінив.
Джон Дворак

5

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

copy file1+file2 appendedfile

Можливо, вам потрібна опція / B для бінарних файлів


2

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

Якби таке існувало під час навчання в університеті, я думаю, я міг би виконати більшість завдань програмування Unix у рідній оболонці Windows.


1

Якщо ви просто хочете додати текст до кінця існуючого файлу, ви можете використовувати трубку >>. колишній:

echo new text >>existingFile.txt

0

Якщо вам потрібно використати пакетний сценарій і тут встановити 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

Дякую також цій відповіді за натхнення.


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

Тож я шукав аналогічне рішення з обов язком зберегти символи EOL і виявив, що немає можливості, тому я роблю те, що я роблю найкраще, і я зробив власну утилізацію. Це рідний кот, який виконується для 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

Я називаю це гостро-котом, оскільки його вбудовано на C #, сміливо скануйте антивірус, а вихідний код буде доступний за запитом


-1

Команда типу Windows має проблеми, наприклад, з символами Unicode на межі 512 байтів. Спробуйте кішку Сігвіна.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.