본문 바로가기
Program/Windows

윈도우즈 하위 폴더의 모든 파일을 하나의 폴더로 복사 하는 방법

by 소중하루 2024. 10. 8.
반응형

윈도우즈 하위 폴더의 모든 파일을 하나의 폴더로 복사 하는 방법

윈도우즈 하위 폴더의 모든 파일을 하나의 폴더로 복사 하는 방법

 

PowerShell을 사용하여 하위 폴더의 모든 파일을 하나의 폴더로 이동하고 파일명 중복 처리하는 방법.

Windows에서 하위 폴더의 모든 파일을 하나의 폴더로 이동하고, 파일명이 동일할 경우 자동으로 파일 이름을 수정하는 방법을 PowerShell을 사용해 처리할 수 있습니다. 아래는 그 방법을 정리한 내용입니다.

1. 목표

하위 폴더의 모든 파일을 하나의 폴더로 이동시키되, 파일명이 동일한 경우 중복을 방지하기 위해 파일명에 숫자를 추가하는 방법.

2. PowerShell 명령어

Get-ChildItem -Recurse "C:\원본폴더경로" -File | ForEach-Object {
    $destinationPath = Join-Path "D:\대상폴더경로" $_.Name

    # 동일한 파일명이 존재하는지 확인
    $counter = 1
    while (Test-Path $destinationPath) {
        # 파일명에 숫자를 추가하여 중복 방지
        $baseName = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)
        $extension = [System.IO.Path]::GetExtension($_.Name)
        $destinationPath = Join-Path "D:\대상폴더경로" ("{0}({1}){2}" -f $baseName, $counter, $extension)
        $counter++
    }

    # 파일 이동
    Copy-Item $_.FullName -Destination $destinationPath
}

 

3. 코드 설명

  • Get-ChildItem -Recurse: 하위 폴더의 모든 파일을 검색합니다.
  • $destinationPath = Join-Path: 각 파일의 목적지 경로를 설정합니다.
  • Test-Path $destinationPath: 동일한 이름의 파일이 대상 폴더에 이미 존재하는지 확인합니다.
  • while 루프: 중복된 파일명이 있을 경우, 숫자를 추가하여 고유한 이름으로 변경합니다.
  • Copy-Item: 중복이 없으면 파일을 이동하며, 중복이 있으면 수정된 파일명으로 이동합니다.

 

4. 예시 사용법

Get-ChildItem -Recurse "C:\Users\Documents\Project" -File | ForEach-Object {
    $destinationPath = Join-Path "D:\Backup\AllFiles" $_.Name
    $counter = 1
    while (Test-Path $destinationPath) {
        $baseName = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)
        $extension = [System.IO.Path]::GetExtension($_.Name)
        $destinationPath = Join-Path "D:\Backup\AllFiles" ("{0}({1}){2}" -f $baseName, $counter, $extension)
        $counter++
    }
    Copy-Item $_.FullName -Destination $destinationPath
}

 

 

5. 결과

  • 하위 폴더에 있는 모든 파일을 하나의 폴더로 이동하며, 파일명이 중복될 경우 파일 이름 뒤에 (1), (2)와 같은 번호가 자동으로 붙어 중복을 방지합니다.

이 방법을 사용하면 하위 폴더에 있는 파일들을 하나의 폴더로 모으고, 중복되는 파일명 문제도 해결할 수 있습니다.

반응형

댓글