Một cmd dòng lệnh hoặc lô để ghép nhiều tệp


99

Tôi có 50 tệp văn bản trong một thư mục.

Có phương pháp dòng lệnh Windows nào để ghép các tệp đó thành một tệp không?

Tôi đang sử dụng Windows Vista .

Tôi không muốn nhập tên của tất cả các tệp.


bạn đang sử dụng phiên bản nào của DOS? :) Xin chào, cung cấp cho chúng tôi thêm thông tin, loại tệp nào ... rõ ràng bạn đang tìm cách hợp nhất các tệp đó.

Bài đăng được chỉnh sửa
Mirage

2
DOS trong hệ điều hành Windows NT (NT, 2000 và mọi thứ kể từ XP) thực sự không phải là DOS, đó là một shell lệnh gọi là "cmd.exe". loại bỏ các thẻ DOS để phản ánh điều này.
quack quixote

xin lỗi vì điều đó, tôi thực sự không biết điều đó Tôi đã suy nghĩ như DOS
Mirage

1
rất may, dấu tích cuối cùng của DOS đã chết với Windows ME. :) nhưng không phải lo lắng - hầu hết mọi người vẫn gọi dòng lệnh Windows là "DOS", vì vậy nó không sai , chỉ là không chính xác . vì đôi khi DOS thực sự vẫn được sử dụng, tôi đang dọn dẹp thẻ DOS để chỉ là những câu hỏi thực sự về DOS.
quack quixote

Câu trả lời:


128

Tôi không muốn nhập tên của tất cả các tệp.

Điều đó dễ tránh. Mở một dấu nhắc lệnh trong thư mục này và gõ lệnh sau:

copy /b *.txt newfile.txt

Nhấn Enter.

Bây giờ bạn sẽ có tất cả các tệp văn bản trong thư mục này được sắp xếp theo ngày tăng dần được hợp nhất thành một tệp có tên newfile.txt.

Mục đích cuối cùng của tôi là lưu trữ nội dung của từng tệp văn bản trong một cột riêng biệt của một bảng Excel.

Đây là một hướng dẫn có thể giúp bạn đạt được "mục đích cuối cùng" của mình:

Hợp nhất tất cả các tệp CSV hoặc TXT trong một thư mục trong một bảng tính


Có thể chèn ký tự dòng mới sau mỗi tệp
Mirage

không phải với phương pháp này.
quack quixote

các tùy chọn khác là gì. Mục đích cuối cùng của tôi là lưu trữ nội dung của từng tệp văn bản trong cột riêng biệt của bảng excel. BẤT CỨ Ý tưởng
Mirage

@Mirage - cập nhật câu trả lời của tôi theo nhận xét của bạn.

Nhưng vấn đề là làm thế nào tôi có thể thêm ký tự endline vào mỗi tệp văn bản. Hiện tại một số tệp văn bản nằm trong cùng một paragrah trong tệp được hợp nhất, vì vậy excel đặt nó vào một cột. HOẶC nếu tôi có thể nối thêm một số ký tự nội tuyến vào tất cả các tệp trước rồi thực hiện thao tác hợp nhất
Mirage

38

Để thêm newLine vào cuối mỗi tệp được nối, hãy sử dụng typethay vì copy, như sau:

type *.txt > newfile.txt

5
CẢNH BÁO: Khi bạn sử dụng loại * .txt> newfile.txt , văn bản sẽ bị trùng lặp.
Malganis

2
Hủy bỏ .txttừ newfilevà bam! Có bạn có nó.
fa wildchild

Đây là một câu trả lời tuyệt vời cho việc ghép các tệp nhật ký hoặc những thứ khác mà bạn sẽ phân tích xuống đường. Cụ thể thực tế bạn có thể làm type x.log.* > merged.logmà không cần một tập tin bó. Các dòng mới là khá dễ dàng để đối phó.
Daniel Chapman

1
Wow, typeđã đi một chặng đường dài kể từ DOS 3.3. Tôi không biết bạn có thể sử dụng mặt nạ tập tin. Điều đó xảy ra khi nào?
CN

32

Giả sử bạn đang nói về việc nối các tệp văn bản, copylệnh có thể được sử dụng để nối chúng lại với nhau:

copy file1+file2+file3 targetfile

Nếu bạn có nhiều tệp, bạn có thể lặp bằng cách nối thêm một tệp cùng một lúc.

Đối với tệp nhị phân, thêm /btùy chọn '':

copy /b file1+file2+file3 targetfile

Điều này giả định rằng bạn biết các tệp nhị phân mà bạn đang làm việc có thể được nối lại; nếu không, bạn sẽ nhận được một khối dữ liệu vô dụng.


5
Điều này khá hữu ích nếu bạn cần nối các tệp theo một thứ tự cụ thể.
kapex

Tài liệu của Microsoft trên copy docs.microsoft.com/en-us/windows-server/ad dùng /
S Meaden

8

Chạy lệnh sau trong dấu nhắc lệnh:

for %f in (*.txt) do type "%f" >> output.txt

1
Điều đó không hoạt động như mong đợi, tất cả các văn bản được sao chép trongoutput.txt
DavidPostill

3
Gợi ý * .txt khớp với output.txt
DavidPostill

@DavidPostill, tôi đã chỉnh sửa câu trả lời theo mối quan tâm của bạn.
Saran

3

Tệp .bat sau đây sẽ nối thêm tất cả các tệp * .for, ngoại trừ tệp có tên XIT.for, vào tệp trống có tên MASTER.for

type NUL > MASTER.for
FOR %%G IN (*.for) DO IF NOT "%%G" == "XIT.for" copy /A MASTER.for+"%%G" && echo. >> MASTER.for

:)


2
Một chút thay đổi ở trên: nếu muốn đảm bảo các tệp được nối theo thứ tự bảng chữ cái , bạn nên sử dụng: FOR / F %% G IN ('dir / b / o * .for') NẾU KHÔNG "%% G" == "XIT.for" sao chép / Một MASTER.for + "%% G" && echo. >> MASTER.for
Guido Domenici

Tôi thích điều này. Một tinh chỉnh khác tôi cần ngày hôm nay là cho một tiêu đề tên tệp được in vào tệp để tách các tệp đầu vào. for %f in (*.txt) do ((echo. & echo == %f == & echo. & type %f ) >> *.txt.dat )
Giá của Curtis

Tôi biết rằng sử dụng bash shell có lẽ sẽ có ý nghĩa hơn!
Giá của Curtis
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.