Yanıtlar:
Bir dosyanın tüm içeriğini almak için:
$content = [IO.File]::ReadAllText(".\test.txt")
Satır sayısı:
([IO.File]::ReadAllLines(".\test.txt")).length
veya
(gc .\test.ps1).length
Sondaki boş satırı içerecek türden hack:
[io.file]::ReadAllText(".\desktop\git-python\test.ps1").split("`n").count
\r\n
sayılacaktır.
Invoke-WebRequest
?
Bir yan not olarak, PowerShell 3.0'da Get-Content
cmdlet'i yeni Raw anahtarıyla kullanabilirsiniz:
$text = Get-Content .\file.txt -Raw
Get-Content
yaptı, ancak 3.0'a kadar elde edemedi -Raw
. Bu olmadan, bir satır dizisi olarak saklanır.
-Raw
parametre şey yerli tarafından uygulanmadı.
(ayrıntılı açıklamaya buradan bakın)
$text = Get-Content $filePath | Out-String
IO.File.ReadAllText
O dosyayı arar, göreli bir yol ile benim için işe yaramadı %USERPROFILE%\$filePath
(en azından Powershell İMKB'den çalıştırırken) yerine geçerli dizinin:
$text = [IO.File]::ReadAllText($filePath)
$text = Get-Content $filePath -Raw
[IO.File]::ReadAllText((Resolve-Path $filePath))
Hoşlandığım bir dosyayı okumaya yönelik bir başka yaklaşım, çeşitli şekillerde değişken notasyon veya değişken sözdizimi olarak adlandırılır ve bir dosya spesifikasyonunu, başında dolar işareti bulunan küme parantezleri içine almayı içerir.
$content = ${C:file.txt}
Bu gösterim, bir L değeri veya bir R değeri olarak kullanılabilir ; böylece, bir dosyaya şöyle bir şeyle kolayca yazabilirsiniz:
${D:\path\to\file.txt} = $content
Başka bir kullanışlı kullanım, geçici bir dosya olmadan ve alt ifadeler olmadan bir dosyayı yerinde değiştirebilmenizdir, örneğin:
${C:file.txt} = ${C:file.txt} | select -skip 1
Başlangıçta bu gösterime hayran kaldım çünkü onunla ilgili bir şey bulmak çok zordu! PowerShell 2.0 spesifikasyonu bile, onu yalnızca bir kez kullanarak yalnızca bir satır gösterdiğinden bahsediyor - ancak hiçbir açıklama veya kullanım ayrıntıları olmadan. Daha sonra bu blog girişini PowerShell değişkenlerinde buldum ve bu da bazı iyi içgörüler sağlıyor.
Bunu kullanmayla ilgili son bir not: Bir sürücü tanımı kullanmalısınız, yani ${drive:filespec}
yukarıdaki tüm örneklerde yaptığım gibi. Sürücü olmadan (örneğin ${file.txt}
) çalışmaz. Bu sürücüdeki dosya spesifikasyonunda kısıtlama yoktur: mutlak veya göreceli olabilir.
Get-Content verileri alır ve satır satır bir diziye döker. Listelediğinizden başka özel gereksinimler olmadığını varsayarsak, içeriğinizi bir değişkene kaydedebilirsiniz.
$file = Get-Content c:\file\whatever.txt
Sadece çalıştırmak $file
tüm içeriği döndürür. Ardından $file.Count
, toplam satır sayısını elde etmek için (çünkü dizilerde zaten yerleşik bir sayma yöntemi vardır) yapabilirsiniz.
Bu yardımcı olur umarım! Ben bir komut dosyası sihirbazı değilim, ancak bu bana yukarıdaki birçok şeyden daha kolay göründü.
$content = [IO.File]::ReadAllText(".\test.txt")
ile aynı şeyi yapıyor gibi görünüyor$content = (gc ".\test.txt" | out-string)
. İkisinin ikincisi daha kısa olduğu için tercih ettiğim şey bu. Ne yazık ki, toplam satır sayısını hesaplamak için sağladığınız yöntemlerin hiçbiri, sondaki boş satırları dikkate almıyor. Başka fikrin var mı?