Jawaban:
Untuk mendapatkan seluruh konten file:
$content = [IO.File]::ReadAllText(".\test.txt")
Jumlah baris:
([IO.File]::ReadAllLines(".\test.txt")).length
atau
(gc .\test.ps1).length
Semacam hackish untuk memasukkan baris kosong trailing:
[io.file]::ReadAllText(".\desktop\git-python\test.ps1").split("`n").count
\r\n
akan dihitung.
Invoke-WebRequest
?
Di samping catatan, di PowerShell 3.0 Anda dapat menggunakan Get-Content
cmdlet dengan sakelar Raw baru:
$text = Get-Content .\file.txt -Raw
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.
(lihat penjelasan rinci di sini)
$text = Get-Content $filePath | Out-String
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):
$text = [IO.File]::ReadAllText($filePath)
$text = Get-Content $filePath -Raw
[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:
$content = ${C:file.txt}
Notasi ini dapat digunakan sebagai nilai-L atau nilai-R ; dengan demikian, Anda dapat dengan mudah menulis ke file dengan sesuatu seperti ini:
${D:\path\to\file.txt} = $content
Penggunaan praktis lainnya adalah Anda dapat mengubah file di tempat tanpa file sementara dan tanpa sub-ekspresi, misalnya:
${C:file.txt} = ${C:file.txt} | select -skip 1
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.
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?
$file = Get-Content c:\file\whatever.txt
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.
$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?