Saya ingin menggunakan PowerShell untuk menyimpan seluruh konten file teks (termasuk baris kosong yang mungkin ada atau mungkin tidak ada) dalam variabel. Saya juga ingin mengetahui jumlah baris dalam file teks. Apa cara paling efisien untuk melakukan ini?
powershell
Nick
sumber
sumber
$content = [IO.File]::ReadAllText(".\test.txt")
tampaknya melakukan hal yang sama seperti$content = (gc ".\test.txt" | out-string)
. Karena yang kedua lebih pendek, itulah yang saya suka. Sayangnya, tidak satu pun dari metode yang Anda berikan untuk menghitung jumlah baris yang mempertimbangkan baris kosong. Ada ide lain?\r\n
akan dihitung.Invoke-WebRequest
?Di samping catatan, di PowerShell 3.0 Anda dapat menggunakan
Get-Content
cmdlet dengan sakelar Raw baru:sumber
Get-Content
melakukannya, tetapi tidak sampai 3.0 yang didapat-Raw
. Tanpa itu, itu disimpan sebagai array garis.-Raw
parameter tidak dilaksanakan oleh apa pun asli.Powershell 2.0:
(lihat penjelasan rinci di sini)
Itu
IO.File.ReadAllText
tidak berfungsi untuk saya dengan jalur relatif, itu mencari file%USERPROFILE%\$filePath
alih-alih direktori saat ini (saat berjalan dari Powershell ISE setidaknya):Powershell 3+:
sumber
[IO.File]::ReadAllText((Resolve-Path $filePath))
Satu lagi pendekatan untuk membaca file yang kebetulan saya suka disebut dengan berbagai cara sebagai notasi variabel atau sintaks variabel dan melibatkan hanya melampirkan filespec dalam tanda kurung kurawal yang didahului dengan tanda dolar, yaitu:
Notasi ini dapat digunakan sebagai nilai-L atau nilai-R ; dengan demikian, Anda dapat dengan mudah menulis ke file dengan sesuatu seperti ini:
Penggunaan praktis lainnya adalah Anda dapat mengubah file di tempat tanpa file sementara dan tanpa sub-ekspresi, misalnya:
Saya menjadi terpesona oleh notasi ini pada awalnya karena sangat sulit untuk mencari tahu tentangnya! Bahkan spesifikasi PowerShell 2.0 menyebutkannya hanya sekali yang menunjukkan hanya satu baris yang menggunakannya - tetapi tanpa penjelasan atau detail penggunaan sama sekali. Saya kemudian menemukan entri blog ini tentang variabel PowerShell yang memberikan beberapa wawasan bagus.
Satu catatan terakhir tentang penggunaan ini: Anda harus menggunakan penunjukan drive, yaitu
${drive:filespec}
seperti yang telah saya lakukan di semua contoh di atas. Tanpa drive (misalnya${file.txt}
) itu tidak berfungsi. Tidak ada batasan pada filespec di drive itu: mungkin absolut atau relatif.sumber
Get-Content mengambil data dan membuangnya ke dalam array, baris demi baris. Dengan asumsi tidak ada persyaratan khusus selain yang Anda cantumkan, Anda bisa menyimpan konten Anda ke dalam variabel?
Menjalankan hanya
$file
akan mengembalikan konten lengkap. Maka Anda bisa melakukannya$file.Count
(karena array sudah memiliki metode penghitungan bawaan) untuk mendapatkan total # baris.Semoga ini membantu! Saya bukan ahli scripting, tapi ini tampak lebih mudah bagi saya daripada banyak hal di atas.
sumber