Eu gostaria de usar o PowerShell para armazenar todo o conteúdo de um arquivo de texto (incluindo a linha em branco à direita que pode ou não existir) em uma variável. Também gostaria de saber o número total de linhas no arquivo de texto. Qual é a maneira mais eficiente de fazer isso?
powershell
usuario
fonte
fonte
$content = [IO.File]::ReadAllText(".\test.txt")
parece fazer a mesma coisa que$content = (gc ".\test.txt" | out-string)
. Como o segundo dos dois é mais curto, é o que eu prefiro. Infelizmente, nenhum dos métodos fornecidos para calcular o número total de linhas leva em consideração as linhas em branco à direita. Alguma outra ideia?\r\n
será contada.Invoke-WebRequest
?Em uma observação lateral, no PowerShell 3.0, você pode usar o
Get-Content
cmdlet com a nova opção Raw:fonte
Get-Content
sim, mas não foi até o 3.0 que ele apareceu-Raw
. Sem isso, ele é armazenado como uma matriz de linhas.-Raw
parâmetro não é implementado por nada nativo.Powershell 2.0:
(veja a explicação detalhada aqui)
O
IO.File.ReadAllText
não funcionou para mim com um caminho relativo, ele procura o arquivo em%USERPROFILE%\$filePath
vez do diretório atual (ao executar do Powershell ISE, pelo menos):Powershell 3+:
fonte
[IO.File]::ReadAllText((Resolve-Path $filePath))
Outra abordagem para ler um arquivo de que gosto é referida de várias maneiras como notação de variável ou sintaxe de variável e envolve simplesmente colocar uma especificação de arquivo entre chaves precedidas por um cifrão, a saber:
Esta notação pode ser usada como um valor L ou um valor R ; assim, você poderia facilmente gravar em um arquivo com algo assim:
Outro uso útil é que você pode modificar um arquivo local sem um arquivo temporário e sem subexpressões, por exemplo:
Fiquei fascinado por essa notação inicialmente porque era muito difícil descobrir qualquer coisa sobre ela! Até mesmo a especificação do PowerShell 2.0 menciona apenas uma vez, mostrando apenas uma linha de uso - mas sem nenhuma explicação ou detalhes de uso. Posteriormente, encontrei esta entrada de blog sobre variáveis do PowerShell que oferece alguns bons insights.
Uma observação final sobre como usar isso: você deve usar uma designação de unidade, ou seja,
${drive:filespec}
como fiz em todos os exemplos acima. Sem a unidade (por exemplo${file.txt}
) não funciona. Sem restrições na especificação do arquivo nessa unidade: pode ser absoluto ou relativo.fonte
Get-Content captura dados e os despeja em uma matriz, linha por linha. Supondo que não haja outros requisitos especiais além dos listados, você poderia simplesmente salvar seu conteúdo em uma variável?
Executar apenas
$file
retornará o conteúdo completo. Então você pode simplesmente fazer$file.Count
(porque os arrays já têm um método de contagem embutido) para obter o número total de linhas.Espero que isto ajude! Não sou um gênio de scripts, mas isso parecia mais fácil para mim do que muitas das coisas acima.
fonte