Share via


파일 및 폴더 작업

PowerShell 드라이브를 탐색하고 드라이브 항목을 조작하는 것은 Windows 디스크 드라이브에 있는 파일 및 폴더를 조작하는 것과 유사합니다. 이 문서에서는 PowerShell을 사용하여 특정 파일 및 폴더 조작 작업을 처리하는 방법을 설명합니다.

폴더 내의 모든 파일 및 폴더 나열

Get-ChildItem을 사용하여 폴더 내의 모든 항목을 직접 가져올 수 있습니다. 선택적 Force 매개 변수를 추가하여 숨겨진 항목 또는 시스템 항목을 표시합니다. 예를 들어 이 명령은 PowerShell 드라이브 C:의 바로 아래에 있는 콘텐츠를 보여 줍니다.

Get-ChildItem -Path C:\ -Force

이 명령은 cmd.exedir 명령 또는 UNIX 셸의 ls를 사용하는 것과 매우 유사한 방법으로 바로 아래에 포함된 항목만 보여 줍니다. 하위 폴더에 항목을 표시하려면 Recurse 매개 변수를 지정해야 합니다. 다음 명령은 C: 드라이브의 모든 항목을 나열합니다.

Get-ChildItem -Path C:\ -Force -Recurse

Get-ChildItem는 경로, 필터, 포함제외 매개 변수를 사용하여 항목을 필터링할 수 있지만 일반적으로 이름만을 기반으로 합니다. Where-Object를 사용하여 항목의 다른 속성을 기반으로 복잡한 필터링을 수행할 수 있습니다.

다음 명령은 Program Files 폴더 내에서 2005년 10월 1일 이후 마지막으로 수정되었으며 1MB보다 작거나 10MB보다 크지 않은 모든 실행 파일을 찾습니다.

Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe |
    Where-Object -FilterScript {
        ($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)
    }

파일 및 폴더 복사

복사는 .으로 Copy-Item수행됩니다. 다음 명령은 PowerShell 프로필 스크립트를 백업합니다.

if (Test-Path -Path $PROFILE) {
    Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}

Test-Path 명령은 프로필 스크립트가 있는지 여부를 검사.

대상 파일이 이미 있는 경우 복사 시도가 실패합니다. 기존 대상을 덮어쓰려면 Force 매개 변수를 사용합니다.

if (Test-Path -Path $PROFILE) {
    Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}

이 명령은 대상이 읽기 전용인 경우에도 작동합니다.

폴더 복사는 동일한 방식으로 작동합니다. 이 명령은 폴더를 새 폴더 C:\temp\test1C:\temp\DeleteMe 에 재귀적으로 복사합니다.

Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe

선택한 항목을 복사할 수도 있습니다. 다음 명령은 C:\data의 임의 위치에 포함된 모든 .txt 파일을 C:\temp\text로 복사합니다.

Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text

파일과 robocopy.exe 같은 xcopy.exe 네이티브 명령을 실행하고 복사할 수 있습니다.

파일 및 폴더 만들기

새 항목 만들기는 PowerShell 공급자에서 동일한 방식으로 작동합니다. PowerShell 공급자에 둘 이상의 항목 유형이 있는 경우(예: FileSystem PowerShell 공급자가 디렉터리와 파일을 구분하는 경우) 항목 유형을 지정해야 합니다.

이 명령은 새 폴더 C:\temp\New Folder를 만듭니다.

New-Item -Path 'C:\temp\New Folder' -ItemType Directory

이 명령은 빈 파일을 새로 만듭니다. C:\temp\New Folder\file.txt

New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File

Important

Force 스위치를 명령과 함께 New-Item 사용하여 폴더를 만들고 폴더가 이미 있는 경우 폴더를 덮어쓰거나 대체하지 않습니다. 기존 폴더 개체를 반환하기만 하면 됩니다. 그러나 이미 존재하는 파일에 New-Item -Force를 사용하는 경우 파일을 완전히 덮어쓰게 됩니다.

폴더 내의 모든 파일 및 폴더 제거

Remove-Item을 사용하여 포함된 항목을 제거할 수 있지만 이 항목에 다른 항목이 들어 있는 경우 제거를 확인하는 메시지가 나타납니다. 예를 들어 다른 항목이 포함된 C:\temp\DeleteMe 폴더를 삭제하려는 경우 해당 폴더를 삭제하기 전에 PowerShell에서 다음과 같은 확인 메시지가 나타납니다.

Remove-Item -Path C:\temp\DeleteMe
Confirm
The item at C:\temp\DeleteMe has children and the Recurse parameter wasn't
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

폴더에 들어 있는 각 항목에 대해 이 메시지가 나타나지 않게 하려면 다음과 같이 Recurse 매개 변수를 지정합니다.

Remove-Item -Path C:\temp\DeleteMe -Recurse

로컬 폴더를 드라이브로 매핑

New-PSDrive 명령을 사용하여 로컬 폴더를 매핑할 수도 있습니다. 다음 명령은 PowerShell 세션에서만 볼 수 있는 로컬 Program Files 디렉터리에 루팅된 로컬 드라이브를 P: 만듭니다.

New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem

그러면 네트워크 드라이브와 마찬가지로 PowerShell 내에 매핑된 드라이브가 PowerShell 셸에 즉시 표시됩니다. 파일 탐색기에서 볼 수 있는 매핑된 드라이브를 만들려면 Persist 매개 변수를 사용합니다. 그러나 원격 경로만 Persist와 함께 사용할 수 있습니다.

텍스트 파일을 배열로 읽어오기

텍스트 데이터에 대한 보다 일반적인 스토리지 형식 중 하나는 별개의 데이터 요소로 처리되는 별도의 줄이 있는 파일에 있습니다. cmdlet은 Get-Content 다음과 같이 한 단계에서 전체 파일을 읽는 데 사용할 수 있습니다.

Get-Content -Path $PROFILE
# Load modules and change to the PowerShell-Docs repository folder
Import-Module posh-git
Set-Location C:\Git\PowerShell-Docs

Get-Content는 파일에서 읽은 데이터를 파일 콘텐츠 한 줄에 하나의 요소가 표시된 배열로 취급합니다. 반환된 콘텐츠의 길이검사 이를 확인할 수 있습니다.

PS> (Get-Content -Path $PROFILE).Length
3

이 명령은 정보 목록을 PowerShell로 가져오는 경우 가장 유용합니다. 예를 들어 파일의 각 줄에 하나의 이름을 사용하여 컴퓨터 이름 또는 IP 주소 목록을 C:\temp\domainMembers.txt 파일에 저장할 수 있습니다. 파일 내용을 검색하고 변수$Computers에 배치하는 데 사용할 Get-Content 수 있습니다.

$Computers = Get-Content -Path C:\temp\DomainMembers.txt

$Computers 는 이제 각 요소의 컴퓨터 이름을 포함하는 배열입니다.