Saya mencoba mereplikasi fungsionalitas catperintah 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 catperintah 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 catadalah alias untuk Get-Content, dan scmerupakan 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-Contentmenggunakan 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-Contentadalah 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 -NoNewlinetidak akan berubah my.binkecuali cap waktu. -Rawmempertahankan byte CR / LF, sementara -NoNewlinemencegah PowerShell menambahkan byte CR / LF-nya sendiri.
Jangan gunakan >; itu mengacaukan pengkodean karakter. Menggunakan:
Get-Content files.* | Set-Content newfile.file
catadalah alias untuk Get-Content.
ÿþyang FF FEdi 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 /Bsakelar.
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
gcmerujuk?
gcadalah alias untuk Get-Content
Untuk menggabungkan file dalam command prompt itu akan menjadi
type file1.txt file2.txt file3.txt > files.txt
PowerShell mengonversi typeperintah menjadi Get-Content, yang berarti Anda akan mendapatkan kesalahan saat menggunakan typeperintah di PowerShell karena Get-Contentperintah 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.