PowerShell : 전체 텍스트 파일 내용을 변수에 저장


118

PowerShell을 사용 하여 텍스트 파일 의 전체 내용 (존재할 수도 있고 없을 수도있는 후행 빈 줄 포함)을 변수 에 저장하고 싶습니다 . 또한 텍스트 파일의 총 줄 수를 알고 싶습니다. 이를 수행하는 가장 효율적인 방법은 무엇입니까?

답변:


122

파일의 전체 내용을 가져 오려면 :

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

라인 수 :

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

또는

(gc .\test.ps1).length

후행 빈 줄을 포함하는 일종의 hackish :

[io.file]::ReadAllText(".\desktop\git-python\test.ps1").split("`n").count

1
감사! $content = [IO.File]::ReadAllText(".\test.txt")와 같은 일을하는 것 같습니다 $content = (gc ".\test.txt" | out-string). 두 번째는 더 짧기 때문에 내가 선호하는 것입니다. 불행히도 총 줄 수를 계산하기 위해 제공 한 방법 중 어느 것도 후행 공백 줄을 고려하지 않습니다. 다른 아이디어가 있습니까?
Nick 2011

@Nick .Net (및 Windows)에서가있는 모든 행 \r\n이 계산됩니다.
manojlds 2011

나는 약간의 실험을하고 업데이트 된 답변과 같은 것을 생각해 냈지만 당신의 도움 없이는 거기에 도달하지 못했을 것입니다. 너무 감사합니다!
Nick 2011

이것을 투명하게 결합하는 방법이 Invoke-WebRequest있습니까?
Kareem

189

참고로 PowerShell 3.0 Get-Content에서는 새 Raw 스위치와 함께 cmdlet을 사용할 수 있습니다 .

$text = Get-Content .\file.txt -Raw 

3
이것은 받아 들여진 대답이어야합니다. 그건 그렇고, Get-Content는 이전 버전에서도 작동했다고 확신합니다.
MatteoSp

10
@MatteoSp Get-Content가 그랬지만 3.0이 되어서야 -Raw. 그것 없이는 라인 배열로 저장됩니다.
jpmc26

이것은 절대적으로 받아 들여지는 대답이어야합니다. 문서-Raw매개 변수가 네이티브에 의해 구현되지 않는다고 말하는 것은 도움이되지 않습니다 .
Richard Szalay 2016-08-03

감사합니다. 지금은 큰 도움이되었습니다.
DAhrens

24

Powershell 2.0 :

(여기에서 자세한 설명 참조)

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

IO.File.ReadAllText그것을에서 파일을 찾습니다, 상대 경로로 나를 위해 작동하지 않았다 %USERPROFILE%\$filePath(적어도 파워 쉘 ISE에서 실행하는 경우) 대신에 현재 디렉토리의 :

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

Powershell 3 이상 :

$text = Get-Content $filePath -Raw

친척 경로를 사용하려면 먼저 해결하십시오. 예 :[IO.File]::ReadAllText((Resolve-Path $filePath))
mvanle

13

내가 좋아하는 파일을 읽는 또 다른 접근 방식은 변수 표기법 또는 변수 구문 으로 다양하게 언급되며 단순히 달러 기호가 앞에 오는 중괄호 안에 파일 사양을 묶는 것입니다.

$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}작동하지 않습니다. 해당 드라이브의 파일 사양에는 제한이 없습니다. 절대적이거나 상대적 일 수 있습니다.


드라이브 이름 뒤에 백 슬래시를 넣지 않는 한 작동하지 않았습니다.
Charles Anderson

@CharlesAnderson : 당신이 언급하는 세 가지 예 중 어느 것이인지, 아니면 전부인지는 분명하지 않습니다. 그럼에도 불구하고 저는 방금 세 가지 모두가 PowerShell V3에서 상대 경로 (즉, 백 슬래시 없음)로 작동한다는 것을 확인했습니다. 또한 내 답변 당시 V2를 사용하고 있었으므로 환경에 문제를 일으키는 다른 것이있을 수 있습니다.
Michael Sorens

$ {C : file.txt}와 같은 예를 의미하며 $ {C : \ file.txt}로 작성해야합니다. 예, 제 환경에 관한 것이라고 생각하지만 그게 뭔지 모르겠습니다.
Charles Anderson

L- 값으로 사용하는 경우 시스템의 기본 인코딩을 사용합니다. 효과없이 $ OutputEncoding을 설정하려고했습니다. R- 값으로 사용하면 string [] 배열을 생성합니다.
robert4 jul.

리터럴 경로 이름 만 사용할 수있는 것 같습니다. 이 안에 변수 또는 Join-Path 표현식과 같은 것을 사용할 수 없습니다. ConvertTo-Json을 통해 파이프 할 때 Get-Content와 비교할 때 다른 세계가 있기 때문에 성가신 일입니다 ($ {...} 결과는 제가 바랬던 것입니다. 이것이 동일한 지 잘 모르겠습니다. GET-내용으로 | 아웃 문자열하지만
카메론 커

2

Get-Content는 데이터를 가져와 한 줄씩 배열로 덤프합니다. 나열된 것보다 다른 특별한 요구 사항이 없다고 가정하면 콘텐츠를 변수에 저장할 수 있습니까?

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

실행 $file하면 전체 내용이 반환됩니다. 그런 다음 $file.Count(배열에 이미 count 메서드가 내장되어 있기 때문에) 총 줄 수를 얻을 수 있습니다.

도움이 되었기를 바랍니다! 나는 스크립팅 전문가는 아니지만 위의 많은 것보다 나에게 더 쉬웠다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.