Chciałbym użyć programu PowerShell do przechowywania całej zawartości pliku tekstowego (w tym końcowego pustego wiersza, który może istnieć lub nie) w zmiennej. Chciałbym również poznać całkowitą liczbę wierszy w pliku tekstowym. Jaki jest najskuteczniejszy sposób na zrobienie tego?
powershell
Nacięcie
źródło
źródło
$content = [IO.File]::ReadAllText(".\test.txt")
wydaje się robić to samo co$content = (gc ".\test.txt" | out-string)
. Ponieważ drugi z nich jest krótszy, to właśnie wolę. Niestety żadna z podanych przez Ciebie metod obliczania całkowitej liczby wierszy nie uwzględnia końcowych pustych wierszy. Jakieś inne pomysły?\r\n
zostanie policzona.Invoke-WebRequest
?Na marginesie, w PowerShell 3.0 możesz użyć polecenia
Get-Content
cmdlet z nowym przełącznikiem Raw:źródło
Get-Content
tak, ale dopiero w wersji 3.0-Raw
. Bez tego jest przechowywany jako tablica linii.-Raw
parametr nie jest implementowany przez nic natywnego.Powershell 2.0:
(zobacz szczegółowe wyjaśnienie tutaj)
IO.File.ReadAllText
Nie działa na mnie ze ścieżki względnej, szuka pliku w%USERPROFILE%\$filePath
zamiast bieżącego katalogu (gdy uruchomiony z PowerShell ISE co najmniej):Powershell 3+:
źródło
[IO.File]::ReadAllText((Resolve-Path $filePath))
Jeszcze jedno podejście do czytania pliku, który przypadkiem mi się podoba, jest różnie określane jako notacja zmiennej lub składnia zmiennej i polega po prostu na umieszczeniu specyfikacji pliku w nawiasach klamrowych poprzedzonych znakiem dolara, a mianowicie:
Ten zapis może być użyty jako wartość L lub R ; w ten sposób możesz równie łatwo pisać do pliku za pomocą czegoś takiego:
Innym przydatnym zastosowaniem jest to, że można modyfikować plik na miejscu bez pliku tymczasowego i bez wyrażeń podrzędnych, na przykład:
Początkowo zafascynował mnie ten zapis, ponieważ bardzo trudno było się o nim dowiedzieć! Nawet specyfikacja PowerShell 2.0 wspomina o tym tylko raz, pokazując tylko jedną linię, która go używa - ale bez żadnego wyjaśnienia ani szczegółów użycia. Później znalazłem ten wpis na blogu na temat zmiennych PowerShell, który daje dobre spostrzeżenia.
Ostatnia uwaga na temat używania tego: musisz użyć oznaczenia dysku, tj
${drive:filespec}
. Tak jak zrobiłem we wszystkich powyższych przykładach. Bez napędu (np.${file.txt}
) Nie działa. Brak ograniczeń co do specyfikacji pliku na tym dysku: może być bezwzględna lub względna.źródło
Get-Content pobiera dane i zrzuca je do tablicy, wiersz po wierszu. Zakładając, że nie ma innych specjalnych wymagań niż wymienione, możesz po prostu zapisać zawartość w zmiennej?
Uruchomienie po prostu
$file
zwróci pełną zawartość. Następnie możesz po prostu zrobić$file.Count
(ponieważ tablice mają już wbudowaną metodę zliczania), aby uzyskać całkowitą liczbę linii.Mam nadzieję że to pomoże! Nie jestem kreatorem skryptów, ale wydawało mi się to łatwiejsze niż wiele rzeczy powyżej.
źródło