Я хотел бы использовать PowerShell для хранения всего содержимого текстового файла (включая завершающую пустую строку, которая может существовать или не существовать) в переменной. Также хотелось бы узнать общее количество строк в текстовом файле. Как это сделать наиболее эффективно?
powershell
Ник
источник
источник
$content = [IO.File]::ReadAllText(".\test.txt")
похоже, делает то же самое, что и$content = (gc ".\test.txt" | out-string)
. Поскольку второй из двух короче, я предпочитаю это. К сожалению, ни один из предложенных вами методов расчета общего количества строк не учитывает завершающие пустые строки. Есть другие идеи?\r\n
будет засчитана любая строка с .Invoke-WebRequest
?Кстати, в PowerShell 3.0 вы можете использовать
Get-Content
командлет с новым переключателем Raw:источник
Get-Content
сделал, но не до версии 3.0-Raw
. Без этого он сохраняется как массив строк.-Raw
параметр не реализован ни в чем родном.Powershell 2.0:
(см. подробное объяснение здесь)
У
IO.File.ReadAllText
меня не получилось с относительным путем, он ищет файл%USERPROFILE%\$filePath
вместо текущего каталога (по крайней мере, при запуске из Powershell ISE):Powershell 3+:
источник
[IO.File]::ReadAllText((Resolve-Path $filePath))
Еще один подход к чтению файла, который мне нравится, по-разному называется нотацией переменных или синтаксисом переменных и включает простое включение спецификации файла в фигурные скобки, которым предшествует знак доллара, а именно:
Это обозначение может использоваться как L-значение или R-значение ; таким образом, вы можете легко записать в файл что-то вроде этого:
Еще одно удобное использование состоит в том, что вы можете изменить файл на месте без временного файла и без подвыражений, например:
Сначала я был очарован этим обозначением, потому что было очень трудно что-либо узнать о нем! Даже в спецификации PowerShell 2.0 он упоминается только один раз, показывая только одну строку, использующую его, но без каких-либо объяснений или деталей использования вообще. Впоследствии я нашел эту запись в блоге о переменных PowerShell, которая дает хорошее представление.
Последнее замечание по использованию этого: вы должны использовать обозначение диска, то есть,
${drive:filespec}
как я делал во всех приведенных выше примерах. Без привода (например${file.txt}
) не работает. Никаких ограничений на спецификацию файлов на этом диске: она может быть абсолютной или относительной.источник
Get-Content собирает данные и построчно выгружает их в массив. Предполагая, что нет других особых требований, кроме перечисленных, вы можете просто сохранить свой контент в переменной?
Запуск просто
$file
вернет полное содержимое. Затем вы можете просто$file.Count
(поскольку в массивы уже встроен метод count) получить общее количество строк.Надеюсь это поможет! Я не мастер сценариев, но мне это показалось проще, чем многое из вышеперечисленного.
источник