Ich möchte PowerShell verwenden, um den gesamten Inhalt einer Textdatei (einschließlich der nachfolgenden Leerzeile, die möglicherweise vorhanden ist oder nicht) in einer Variablen zu speichern . Ich möchte auch die Gesamtzahl der Zeilen in der Textdatei wissen. Was ist der effizienteste Weg, dies zu tun?
powershell
Nick
quelle
quelle
$content = [IO.File]::ReadAllText(".\test.txt")
scheint das Gleiche zu tun wie$content = (gc ".\test.txt" | out-string)
. Da der zweite der beiden kürzer ist, bevorzuge ich das. Leider berücksichtigt keine der von Ihnen angegebenen Methoden zur Berechnung der Gesamtzahl der Zeilen nachgestellte Leerzeilen. Irgendwelche anderen Ideen?\r\n
gezählt.Invoke-WebRequest
?Get-Content
Nebenbei bemerkt können Sie in PowerShell 3.0 das Cmdlet mit dem neuen Raw-Schalter verwenden:quelle
Get-Content
tat es, aber es war nicht bis 3.0, dass es bekam-Raw
. Ohne das wird es als Array von Zeilen gespeichert.-Raw
Parameter von nichts Nativem implementiert wird.Powershell 2.0:
(siehe ausführliche Erklärung hier)
Das
IO.File.ReadAllText
hat bei mir mit einem relativen Pfad nicht funktioniert, es sucht nach der Datei%USERPROFILE%\$filePath
anstelle des aktuellen Verzeichnisses (zumindest wenn es von Powershell ISE ausgeführt wird):Powershell 3+:
quelle
[IO.File]::ReadAllText((Resolve-Path $filePath))
Ein weiterer Ansatz zum Lesen einer Datei, den ich zufällig mag, wird verschiedentlich als Variablennotation oder Variablensyntax bezeichnet und umfasst einfach das Einschließen einer Dateispezifikation in geschweifte Klammern, denen ein Dollarzeichen vorangestellt ist:
Diese Notation kann entweder als L-Wert oder als R-Wert verwendet werden . Sie können also genauso gut in eine Datei mit folgendem Inhalt schreiben:
Eine weitere praktische Verwendung besteht darin, dass Sie eine Datei ohne temporäre Datei und ohne Unterausdrücke ändern können, zum Beispiel:
Diese Notation hat mich anfangs fasziniert, weil es sehr schwierig war, etwas darüber herauszufinden! Selbst in der PowerShell 2.0-Spezifikation wird nur einmal erwähnt, dass nur eine Zeile verwendet wird - jedoch ohne Erklärung oder Einzelheiten zur Verwendung. Ich habe später diesen Blogeintrag zu PowerShell-Variablen gefunden , der einige gute Einblicke gibt.
Ein letzter Hinweis zur Verwendung: Sie müssen eine Laufwerksbezeichnung verwenden, dh
${drive:filespec}
wie ich es in allen obigen Beispielen getan habe. Ohne das Laufwerk (zB${file.txt}
) funktioniert es nicht. Keine Einschränkungen für die Dateispezifikation auf diesem Laufwerk: Sie kann absolut oder relativ sein.quelle
Get-Content erfasst Daten und speichert sie zeilenweise in einem Array. Angenommen, es gibt keine anderen speziellen Anforderungen als die von Ihnen aufgelisteten, könnten Sie Ihren Inhalt einfach in einer Variablen speichern?
Wenn Sie nur ausführen,
$file
wird der gesamte Inhalt zurückgegeben. Dann können Sie einfach$file.Count
(da in Arrays bereits eine Zählmethode integriert ist) die Gesamtzahl der Zeilen ermitteln.Hoffe das hilft! Ich bin kein Skript-Assistent, aber das schien mir einfacher zu sein als viele der oben genannten Dinge.
quelle