Saya mencoba mereplikasi fungsionalitas cat
perintah di Unix.
Saya ingin menghindari solusi di mana saya secara eksplisit membaca kedua file menjadi variabel, menggabungkan variabel bersama-sama, dan kemudian menulis variabel gabungan.
Saya mencoba mereplikasi fungsionalitas cat
perintah di Unix.
Saya ingin menghindari solusi di mana saya secara eksplisit membaca kedua file menjadi variabel, menggabungkan variabel bersama-sama, dan kemudian menulis variabel gabungan.
Jawaban:
Anda cukup menggunakan cat example1.txt, example2.txt | sc examples.txt
. Anda pasti dapat menggabungkan lebih dari dua file dengan gaya ini juga. Selain itu, jika file diberi nama serupa, Anda dapat menggunakan:
cat example*.txt | sc allexamples.txt
Itu cat
adalah alias untuk Get-Content
, dan sc
merupakan alias untuk Set-Content
.
Catatan 1 : Hati-hati dengan metode yang terakhir - jika Anda mencoba menampilkan ke examples.txt
(atau serupa yang cocok dengan pola), PowerShell akan masuk ke loop tak terbatas! (Saya baru saja menguji ini).
Catatan 2 : Menghasilkan file dengan >
tidak mempertahankan pengkodean karakter! Inilah mengapa menggunakan Set-Content
( sc
) direkomendasikan.
Set-Content
menggunakan halaman kode nasional (misalnya Windows-1252 untuk bahasa Inggris). Jika file sumber berisi pengkodean lain (misalnya Windows-1251 atau UTF8), Anda harus mengatur pengkodean yang benar sc file.txt -Encoding UTF8
(nomor seperti 1251 untuk bahasa Rusia didukung sejak v6.2)
Add-Content
adalah jika Anda menjalankan perintah dua kali, file agregat dua kali lebih lama. Pengganti yang bagus adalah Out-File
. Contoh di sini
Get-Content my.bin -Raw | Set-Content my.bin -NoNewline
tidak akan berubah my.bin
kecuali cap waktu. -Raw
mempertahankan byte CR / LF, sementara -NoNewline
mencegah PowerShell menambahkan byte CR / LF-nya sendiri.
Jangan gunakan >
; itu mengacaukan pengkodean karakter. Menggunakan:
Get-Content files.* | Set-Content newfile.file
cat
adalah alias untuk Get-Content
.
ÿþ
yang FF FE
di awal file gabungan saya saat menggunakan >
.
Di cmd
, Anda dapat melakukan ini:
copy one.txt+two.txt+three.txt four.txt
Di PowerShell ini akan menjadi:
cmd /c copy one.txt+two.txt+three.txt four.txt
Sementara cara PowerShell akan menggunakan gc , cara di atas akan cukup cepat, terutama untuk file besar. Dan itu dapat digunakan pada file non- ASCII juga menggunakan /B
sakelar.
Anda dapat menggunakan cmdlet Add-Content . Mungkin ini sedikit lebih cepat daripada solusi lainnya, karena saya tidak mengambil konten file pertama.
gc .\file2.txt| Add-Content -Path .\file1.txt
gc
merujuk?
gc
adalah alias untuk Get-Content
Untuk menggabungkan file dalam command prompt itu akan menjadi
type file1.txt file2.txt file3.txt > files.txt
PowerShell mengonversi type
perintah menjadi Get-Content
, yang berarti Anda akan mendapatkan kesalahan saat menggunakan type
perintah di PowerShell karena Get-Content
perintah tersebut memerlukan koma yang memisahkan file. Perintah yang sama di PowerShell adalah
Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt
Saya menggunakan:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log
-Encoding ASCII -Append
Ini ditambahkan dengan baik. Saya menambahkan pengkodean ASCII untuk menghapus karakter nol yang ditampilkan Notepad ++ tanpa pengkodean eksplisit.
Anda dapat melakukan sesuatu seperti:
get-content input_file1 > output_file
get-content input_file2 >> output_file
Di mana >
adalah alias untuk "out-file", dan >> adalah alias untuk "out-file -append".
Karena sebagian besar balasan lain sering salah formatnya (karena perpipaan), hal teraman untuk dilakukan adalah sebagai berikut:
add-content $YourMasterFile -value (get-content $SomeAdditionalFile)
Saya tahu Anda ingin menghindari membaca konten $ SomeAdditionalFile ke dalam variabel, tetapi untuk menyimpan misalnya format baris baru Anda, saya rasa tidak ada cara yang tepat untuk melakukannya tanpa.
Solusinya adalah dengan mengulang baris $ SomeAdditionalFile Anda demi baris dan menyalurkannya ke $ YourMasterFile Anda. Namun ini terlalu intensif sumber daya.