2012-01-05 35 views

Trả lời

80

Bạn chỉ cần sử dụng cat example1.txt, example2.txt | sc examples.txt. Bạn chắc chắn có thể nối nhiều hơn hai tệp với kiểu này. Thêm vào đó, nếu các tập tin được đặt tên tương tự, bạn có thể sử dụng:

cat example*.txt | sc allexamples.txt 

Các cat là một bí danh cho Get-Content, và sc là một bí danh cho Set-Content.

Note 1: Hãy cẩn thận với phương pháp thứ hai - nếu bạn cố gắng đầu ra để examples.txt (hoặc tương tự phù hợp với mô hình), PowerShell sẽ nhận được vào một vòng lặp vô hạn! (Tôi vừa thử nghiệm điều này).

Lưu ý 2: Xuất ra tệp có > không giữ mã hóa ký tự! Đây là lý do tại sao nên sử dụng Set-Content (sc).

+0

Chỉ trong trường hợp ai đó muốn lặp qua các tập tin với _GET -ChildItems | Cấu trúc Foreach-Object_ bạn có thể muốn sử dụng Add-Content thay vì Set-Content. Nếu không, tệp đích sẽ bị ghi đè trong mỗi lần lặp. – Jonas

1

Bạn có thể làm một cái gì đó như:

get-content input_file1 > output_file 
get-content input_file2 >> output_file 

đâu > là một bí danh cho "out-tập tin", và >> là một bí danh cho "ra-file -Nối".

12

Trong cmd, bạn có thể làm điều này:

copy one.txt+two.txt+three.txt four.txt 

Trong PowerShell này sẽ là:

cmd /c copy one.txt+two.txt+three.txt four.txt 

Trong khi cách PowerShell sẽ được sử dụng gc, ở trên sẽ khá nhanh, đặc biệt cho các tệp lớn. Và nó cũng có thể được sử dụng trên các tệp không phải là ASCII bằng cách sử dụng công tắc /B.

+2

Đối với tôi lệnh cat chạy nhiều lệnh dài hơn lệnh cmd/c (chạy rất nhanh); cảm ơn vì đã chỉ ra tùy chọn! – Rob

10

Bạn có thể sử dụng lệnh ghép ngắn Add-Content. Có lẽ nó nhanh hơn một chút so với các giải pháp khác, bởi vì tôi không lấy nội dung của tập tin đầu tiên.

gc .\file2.txt| Add-Content -Path .\file1.txt 
44

Không sử dụng cat ... >; nó làm rối loạn mã hóa ký tự. Sử dụng:

Get-Content files.* | Set-Content newfile.file 

Tôi mất nhiều giờ để tìm hiểu điều này.

+0

'cat' là bí danh cho' Get-Content'. – n0rd

+3

@ n0rd Tôi nghĩ rằng đó là nhiều hơn một "sử dụng đường ống thay thế" điều. – ksoo

1

Vì hầu hết các trả lời khác thường nhận được các định dạng sai (do các đường ống), điều an toàn nhất để làm là như sau:

add-content $YourMasterFile -value (get-content $SomeAdditionalFile) 

Tôi biết bạn muốn tránh đọc nội dung của $ SomeAdditionalFile vào một biến, nhưng để tiết kiệm ví dụ định dạng dòng mới của bạn tôi không nghĩ rằng có cách thích hợp để làm điều đó mà không có.

Giải pháp thay thế sẽ là lặp qua đường $ SomeAdditionalFile của bạn bằng đường dây và đường ống đó vào $ YourMasterFile của bạn. Tuy nhiên điều này là quá nhiều nguồn lực.

3

tôi đã sử dụng:

Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log 
-Encoding ASCII -Append 

mỹ nối này. Tôi đã thêm mã ASCII để loại bỏ các ký tự nul Notepad ++ được hiển thị mà không cần mã hóa rõ ràng.

0

Tôi nghĩ rằng "cách powershell" có thể là:

set-content destination.log -value (get-content c:\FileToAppend_*.log) 
2

Để concat tập tin trong lệnh nhắc nó sẽ là

type file1.txt file2.txt file3.txt > files.txt

Powershell chuyển đổi lệnh loại để Get-Content, mà có nghĩa là bạn sẽ gặp lỗi khi sử dụng lệnh type trong powershell vì lệnh Get-Content yêu cầu dấu phẩy tách các tệp. Lệnh cùng trong PowerShell sẽ

Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt

1

Nếu bạn cần đặt các tập tin bằng cách tham số cụ thể (ví dụ như thời gian ngày):

gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log 
Các vấn đề liên quan