PowerShell: хранение всего содержимого текстового файла в переменной

powershell

146629 просмотра

5 ответа

2431 Репутация автора

Я хотел бы использовать PowerShell для хранения всего содержимого текстового файла (включая завершающую пустую строку, которая может существовать или не существовать) в переменной. Я также хотел бы знать общее количество строк в текстовом файле. Какой самый эффективный способ сделать это?

Автор: Nick Источник Размещён: 02.11.2011 06:42

Ответы (5)


106 плюса

229909 Репутация автора

Решение

Чтобы получить все содержимое файла:

$content = [IO.File]::ReadAllText(".\test.txt")

Количество строк:

([IO.File]::ReadAllLines(".\test.txt")).length

или же

(gc .\test.ps1).length

Вроде хакиш, чтобы включить в конце пустую строку:

[io.file]::ReadAllText(".\desktop\git-python\test.ps1").split("`n").count
Автор: manojlds Размещён: 02.11.2011 07:01

168 плюса

94095 Репутация автора

Кстати, в PowerShell 3.0 вы можете использовать Get-Contentкомандлет с новым переключателем Raw:

$text = Get-Content .\file.txt -Raw 
Автор: Shay Levy Размещён: 02.11.2011 08:05

13 плюса

27169 Репутация автора

Еще один подход к чтению файла, который мне нравится, называется по-разному как переменная нотация или переменный синтаксис и включает в себя просто заключить спецификацию файла в фигурные скобки, перед которыми стоит знак доллара, с помощью:

$content = ${C:file.txt}

Это обозначение может использоваться как L-значение или R-значение ; таким образом, вы можете так же легко записать в файл что-то вроде этого:

 ${D:\path\to\file.txt} = $content

Еще одно удобное использование - вы можете изменить файл на месте без временного файла и без подвыражений, например:

${C:file.txt} = ${C:file.txt} | select -skip 1

Поначалу я был очарован этой нотацией, потому что мне было очень трудно что-либо узнать об этом! Даже в спецификации PowerShell 2.0 упоминается об этом только один раз, когда используется только одна строка, но без объяснения или деталей использования вообще. Впоследствии я нашел эту запись в блоге о переменных PowerShell, которая дает некоторые хорошие идеи.

Последнее замечание об использовании этого: вы должны использовать обозначение диска, то есть, ${drive:filespec}как я делал во всех приведенных выше примерах. Без привода (например ${file.txt}) это не работает. Нет ограничений на спецификацию файлов на этом диске: она может быть абсолютной или относительной.

Автор: Michael Sorens Размещён: 26.08.2012 09:19

20 плюса

2369 Репутация автора

Powershell 2.0:

(см. подробное объяснение здесь)

$text = Get-Content $filePath | Out-String

У IO.File.ReadAllTextменя не работает относительный путь, он ищет файл %USERPROFILE%\$filePathвместо текущего каталога (по крайней мере, при запуске из Powershell ISE):

$text = [IO.File]::ReadAllText($filePath)

Powershell 3+:

$text = Get-Content $filePath -Raw
Автор: Kapé Размещён: 26.03.2015 12:14

1 плюс

11 Репутация автора

Get-Content захватывает данные и выводит их в массив строка за строкой. Предполагая, что нет никаких других особых требований, чем вы перечислили, вы могли бы просто сохранить свой контент в переменную?

$file = Get-Content c:\file\whatever.txt

Запуск просто $fileвернет все содержимое. Затем вы можете просто сделать $file.Count(потому что в массивы уже встроен метод count), чтобы получить общее количество строк.

Надеюсь это поможет! Я не специалист по написанию сценариев, но мне это показалось легче, чем многое из вышеперечисленного.

Автор: Jerry T. Размещён: 18.04.2016 10:17
Вопросы из категории :
32x32