하나의 파일뿐만 아니라 디렉토리의 모든 .log 파일을 보려면 다음 코드를 어떻게 변경합니까?
모든 파일을 반복하고 “step4″또는 “step9″가 포함되지 않은 모든 줄을 삭제해야합니다. 현재 이것은 새로운 파일을 만들지 만 for each
여기서 루프 를 사용하는 방법을 모르겠습니다 (초보자).
실제 파일 이름은 2013 09 03 00_01_29.log 입니다. 출력 파일을 덮어 쓰거나 SAME 이름을 “out”으로 추가하고 싶습니다.
$In = "C:\Users\gerhardl\Documents\My Received Files\Test_In.log"
$Out = "C:\Users\gerhardl\Documents\My Received Files\Test_Out.log"
$Files = "C:\Users\gerhardl\Documents\My Received Files\"
Get-Content $In | Where-Object {$_ -match 'step4' -or $_ -match 'step9'} | `
Set-Content $Out
답변
이것을 시도하십시오 :
Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files" -Filter *.log |
Foreach-Object {
$content = Get-Content $_.FullName
#filter and save content to the original file
$content | Where-Object {$_ -match 'step[49]'} | Set-Content $_.FullName
#filter and save content to a new file
$content | Where-Object {$_ -match 'step[49]'} | Set-Content ($_.BaseName + '_out.log')
}
답변
사용할 수있는 디렉토리의 내용을 얻으려면
$files = Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files\"
그런 다음이 변수를 반복 할 수도 있습니다.
for ($i=0; $i -lt $files.Count; $i++) {
$outfile = $files[$i].FullName + "out"
Get-Content $files[$i].FullName | Where-Object { ($_ -match 'step4' -or $_ -match 'step9') } | Set-Content $outfile
}
이것을 넣는 더 쉬운 방법은 foreach
루프입니다 (@Soapy 및 @MarkSchultheiss 덕분에).
foreach ($f in $files){
$outfile = $f.FullName + "out"
Get-Content $f.FullName | Where-Object { ($_ -match 'step4' -or $_ -match 'step9') } | Set-Content $outfile
}
답변
특정 종류의 파일에 대해 디렉토리 내부에서 반복적으로 루프를 반복해야하는 경우 doc
파일 유형 의 모든 파일을 필터링하는 아래 명령을 사용하십시오.
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc
여러 유형에 대해 필터링을 수행해야하는 경우 아래 명령을 사용하십시오.
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc,*.pdf
이제 $fileNames
변수는 비즈니스 로직을 반복하고 적용 할 수 있는 배열의 역할을합니다 .
답변
다른 대답은 훌륭합니다. PowerShell에 사용할 수있는 다른 접근법 : GNUWin32 유틸리티를 설치하고 grep을 사용하여 라인을 보거나 출력을 파일 http://gnuwin32.sourceforge.net/로 리디렉션하십시오.
매번 새 파일을 덮어 씁니다.
grep "step[49]" logIn.log > logOut.log
이것은 logIn 파일을 겹쳐 쓰고 데이터를 유지하려는 경우를 대비하여 로그 출력을 추가합니다.
grep "step[49]" logIn.log >> logOut.log
참고 : GNUWin32 유틸리티를 전체적으로 사용하려면 bin 폴더를 시스템 경로에 추가해야합니다.