HOWTO · PowerShell
파일 및 폴더를 통한 PowerShell 루프
이 문서에서는 파일 및 폴더를 반복하는 PowerShell 스크립트를 작성하는 방법을 보여줍니다. Get-ChildItem 및 ForEach 문을 사용하여 다른 PowerShell 스크립트를 만듭니다.
이 문서에서는 파일 및 폴더를 반복하는 PowerShell 스크립트를 작성하는 방법을 보여줍니다. Get-ChildItem 및 ForEach 문을 사용하여 다양한 PowerShell 스크립트를 생성합니다. 바로 뛰어들자.
PowerShell Get-ChildItem을 사용하여 파일 및 폴더 반복
PowerShell Get-ChildItem cmdlet을 사용하여 지정된 위치에 파일 및 폴더 목록을 표시합니다. -path 속성을 사용하여 원하는 디렉토리의 경로를 지정합니다.
Get-ChildItem도 gci를 별칭으로 사용합니다.
예를 들어 C:/ 드라이브에 있는 파일 및 폴더 목록을 얻으려면 다음을 실행할 수 있습니다.
Get-ChildItem -Path 'C:\'
위의 명령은 드라이브의 루트에 있는 파일과 폴더만 표시합니다. 하위 디렉토리(하위 폴더)의 내용을 가져오려면 아래 그림과 같이 -Recurse 매개변수를 추가할 수 있습니다.
Get-ChildItem -Path 'C:\' -Recurse
PowerShell은 드라이브에 있는 모든 하위 폴더의 내용을 표시합니다.
PowerShell Get-ChildItem 및 ForEach를 사용하여 파일 및 폴더를 반복합니다.
PowerShell ForEach 루프를 사용하여 개체 컬렉션의 각 개체 역할을 합니다. 다음은 Get-ChildItem cmdlet 및 ForEach 루프를 사용할 때의 일반 구조입니다.
Get-ChildItem –Path "C:\" |
Foreach-Object {
#Some action with $_.FullName
}
두 개의 PowerShell 유틸리티를 사용하는 몇 가지 예제 스크립트를 살펴보겠습니다.
C:\Users\pc 폴더에 있는 모든 .csv 파일을 삭제한다고 가정해 보겠습니다. 어떻게 해야 할까요?
아래 그림과 같이 Get-ChildItem cmdlet 및 ForEach 루프를 사용하여 이 작업을 수행할 수 있습니다.
Get-ChildItem –Path "C:\Users\pc" -Recurse -Filter *.csv
|
Foreach-Object {
Remove-Item $_.FullName -WhatIF
}
위의 스크립트는 -Recurse 매개 변수와 함께 PowerShell Get-ChildItem cmdlet을 사용하여 C:\Users\pc 폴더의 모든 파일을 가져옵니다. 그런 다음 Filter 매개 변수를 사용하여 .csv 파일 확장명만 있는 파일을 가져옵니다.
파일이 제거되는 ForEach 루프로 결과를 파이프합니다. 그러나 파일을 삭제하고 싶지 않기 때문에 -WhatIf 매개변수를 추가했습니다. 아래는 위 스크립트의 출력입니다.
스크립트에서 .csv 파일 확장자를 가진 6개의 파일을 찾았습니다. -WhatIf 매개변수를 사용한 이후로 파일이 아직 삭제되지 않았습니다.
특정 날짜보다 오래된 파일을 삭제하는 스크립트를 만들 수도 있습니다. 시스템에서 임시 로그 파일을 정리할 때 유용할 수 있습니다.
다음은 pc 디렉토리에서 7일보다 오래된 파일을 삭제하는 예제 스크립트입니다.
Get-ChildItem C:\Users\pc\ -Recurse
|
Where-Object { $_.CreationTime -lt ($(Get-Date).AddDays(-7))} |
ForEach-Object { remove-Item $_.FullName –whatif }
Recurse 매개변수가 있는 이 Get-ChildItem은 pc 폴더의 모든 파일을 가져와서 ForEach 루프로 파이다운합니다. 루프는 7일보다 오래된 모든 파일을 삭제합니다.
폴더에 있는 파일을 없애고 싶지 않기 때문에 -WhatIf 매개변수를 추가했습니다.
결론적으로 PowerShell Get-ChildItem 및 ForEach 루프를 사용하여 파일과 폴더를 반복하는 스크립트를 만들 수 있습니다.
ForEach 루프는 Get-ChildItem cmdlet에서 파이프된 모든 파일에 대해 지정된 작업을 수행합니다. 두 가지 PowerShell 유틸리티를 사용할 수 있는 여러 가지 방법이 있습니다.