Có thay thế cho con mèo trên Windows


309

Tôi cần tham gia hai tệp nhị phân với một *.battập lệnh trên Windows.

Làm thế nào tôi có thể đạt được điều đó?


15
Câu hỏi tiêu đề và câu hỏi mô tả của bạn không hoàn toàn đồng bộ. loại sẽ là câu trả lời tốt nhất cho câu hỏi tiêu đề và bản sao / b sẽ là câu trả lời tốt nhất cho câu hỏi mô tả. Bạn có thể muốn thay đổi tiêu đề đó nếu có thể.
Giuse

2
@Joseph chỉ typecó thể thay thế một phần catchức năng của (do sự phân biệt giữa tệp nhị phân và tệp văn bản trên Windows).
jfs

Câu trả lời:


452

typeLệnh Windows hoạt động tương tự UNIX cat.

Ví dụ 1:

type file1 file2 > file3

tương đương với:

cat file1 file2 > file3

Ví dụ 2:

type  *.vcf > all_in_one.vcf  

Lệnh này sẽ hợp nhất tất cả các vcard thành một.


1
Vấn đề với kiểu trong tình huống này là nó thêm các tiêu đề tệp không mong muốn khi nhập nhiều hơn một tệp được chỉ định trên dòng lệnh.
Greg Hewgill

2
Khi chỉ định nhiều hơn một tệp trên dòng lệnh, hãy nhập một vài dòng trống và tên của tệp, trước khi sao chép nội dung của tệp. Hãy dùng thử :)
Greg Hewgill

3
Ah, tôi đã không nhận thấy rằng các tiêu đề đi đến stderr. Tốt để biết.
Greg Hewgill

1
lưu ý rằng loại có mũi tên (như trên) không hoạt động với các tệp lớn (như> 2 GB hoặc 4), ít nhất là với XP. Tuy nhiên, bạn có thể sử dụng lệnh "sao chép" (xem câu trả lời khác).
rogerdpack

2
Một mẹo khác: để tránh hiển thị bất kỳ đầu ra nào kháctype file1 file2 > file3 2>NUL
Mike T

85

Bạn có thể sử dụng copy /bnhư thế này:

copy /b file1+file2 destfile

5
đối với chuỗi các tệp bạn có thể sử dụng các ký tự đại diện như "sao chép / b tệp * Destfile"
Stalinko

lạ với tôi rằng đây không phải là câu trả lời được chấp nhận, do các vấn đề rõ ràng được typenêu trong các nhận xét về câu trả lời được chấp nhận ... trừ khi giải pháp này có nhược điểm tương tự nhưng không đủ phổ biến để mọi người lưu ý!
Jony phát triển mạnh

23

Nếu bạn có quyền kiểm soát máy mà bạn đang làm việc, tôi khuyên bạn nên cài đặt GnuWin32 . Chỉ cần "Tải xuống tất cả" và để chương trình wget lấy tất cả các gói. Sau đó, bạn sẽ có quyền truy cập vào cat, grep, find, gzip, tar, ít hơn và hàng trăm người khác.

GnuWin32 là một trong những thứ đầu tiên tôi cài đặt trên hộp Windows mới.


Tôi muốn giới thiệu GetGnuWin32 (để đơn giản hóa việc cài đặt)
jfs

3
Nếu sử dụng một tiện ích bên ngoài có thể chấp nhận được, tôi thích busybox cho Windows, đó là một exe ~ 600 kB kết hợp ~ 30 tiện ích Unix. Sự khác biệt duy nhất là người ta nên sử dụng lệnh "busybox cat" thay vì "cat" đơn giản
Fr0sT

12

Ổ cắm PowerShell không biết xấu hổ (vì tôi nghĩ rằng việc học là một nỗi đau, vì vậy việc dạy một cái gì đó ở bất kỳ cơ hội nào cũng có thể giúp đỡ)

Get-Content file1,file2

Lưu ý rằng đó typelà bí danh cho Get-Content, vì vậy nếu bạn thích nó hơn, bạn có thể viết:

type file1,file2

1
Nó hoạt động, nhưng nó là con chó chậm. Tôi đã tìm thấy câu hỏi này trong khi ngồi chờ powershell ghép một số tệp video lớn đang mất nửa giờ cho mỗi tệp. Tôi đã giết quá trình và thử nó với cmd bằng cách sử dụng type file1 file2 > destvà mỗi cái được thực hiện trong vài giây.
stib


Nó đã chuyển đổi các tập tin của tôi thành UTF-16, vì một số lý do. -Encoding UTF8không thay đổi gì cả.
John Dvorak

5

Chỉ cần sử dụng lệnh dos copy với nhiều tệp nguồn và một tệp đích.

copy file1+file2 appendedfile

Bạn có thể cần tùy chọn / B cho các tệp nhị phân


2

Trong bản phát hành Redstone 1 của Windows 10, Windows đã thêm một hệ thống con Linux thực sự cho nhân NTOS. Tôi nghĩ ban đầu nó được dự định để hỗ trợ các ứng dụng Android và có thể là các kịch bản loại docker. Microsoft hợp tác với Canonical và thêm một vỏ bash bản địa thực tế. Ngoài ra, bạn có thể sử dụng trình quản lý gói apt để nhận nhiều gói Ubuntu. Ví dụ: bạn có thể thực hiện apt-get gcc để cài đặt chuỗi công cụ GCC như trên hộp Linux.

Nếu một thứ như vậy tồn tại khi tôi còn ở trường đại học, tôi nghĩ rằng tôi có thể đã thực hiện hầu hết các bài tập lập trình Unix của mình trong Windows bash shell.


1

Nếu bạn chỉ muốn nối văn bản vào cuối tệp hiện có, bạn có thể sử dụng ống >>. Ví dụ:

echo new text >>existingFile.txt

0

Nếu bạn phải sử dụng tập lệnh bó và cài đặt python thì đây là câu trả lời polygot trong đợt và 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())

Nếu được lưu dưới dạng tham gia.bat sẽ là:

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

Cảm ơn câu trả lời này cho cảm hứng.


0

Tôi cố gắng tham gia lại kho lưu trữ tar đã được chia tách trong máy chủ Linux.

Và tôi đã tìm thấy nếu tôi sử dụng typetrong Windows cmd.exe, nó sẽ khiến tệp bị nối sai thứ tự (nghĩa là typeđôi khi sẽ đặt XXXX.ad vào lúc đầu và sau đó là XXXX.ac, XXXX.aa, v.v.)

Vì vậy, tôi đã tìm thấy một công cụ có tên battrong GitHub https://github.com/sharkdp/bat có bản dựng Windows và có mã nổi bật tốt hơn và điều quan trọng là, nó hoạt động tốt trên Windows để tham gia lưu trữ tar!


0

Vì vậy, tôi đã tìm kiếm một giải pháp tương tự với khả năng bảo toàn các ký tự EOL và phát hiện ra không có cách nào, vì vậy tôi làm những gì tôi làm tốt nhất và tự làm điều này Đây là một con mèo bản địa có thể thực thi được cho 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

Tôi gọi nó là mèo sắc như được xây dựng với C #, thoải mái quét bằng phần mềm chống vi-rút và mã nguồn sẽ được cung cấp theo yêu cầu


-1

Lệnh loại Windows có vấn đề, ví dụ với các ký tự Unicode trên ranh giới 512 byte. Hãy thử con mèo của Cygwin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.