카테고리 없음

중복파일명 변경해서 순서 유지하기. 파워쉘 파일명수정

벨포트조던 2025. 11. 9.
반응형

파일 탐색기(Explorer)가 “자연 정렬(natural sorting)”을 써서 1762587476 (1), 1762587476 (2), 1762587476 순서로 보이는 현상입니다. 같은 접두어일 때 괄호 번호가 정렬 키로 인식되면서 기본 이름(번호 없음)이 맨 뒤로 밀리는 케이스가 발생합니다.

 

기본값: 윈도우 파일 탐색기(Explorer) 는 오래전부터 **숫자 인지 ‘자연 정렬(natural sorting)’**을 기본으로 씁니다. 그래서 2가 10보다 먼저, abc2가 abc10보다 먼저 옵니다.

 

따라서 파일 수정이 필요함

 

2-B. “형제 복사본”이 있을 때만 기본 파일에 (0) 붙이기

(예: 1762587476 (1), (2)가 존재할 때만 1762587476 → 1762587476 (0))

Set-Location "D:\작업폴더"
$files = Get-ChildItem -File
# 접미사 " (숫자)"를 제거한 루트 이름으로 그룹화
$groups = $files | Group-Object { $_.BaseName -replace ' \(\d+\)$','' }
foreach ($g in $groups) {
  $hasCopies = $g.Group | Where-Object { $_.BaseName -match ' \(\d+\)$' }
  $plain     = $g.Group | Where-Object { $_.BaseName -notmatch ' \(\d+\)$' }
  if ($hasCopies -and $plain) {
    foreach ($p in $plain) {
      $candidate = '{0} (0){1}' -f $p.BaseName, $p.Extension
      # 충돌 시 (0),(1),(2)… 중 비어있는 숫자를 자동 선택
      $n = 0
      while (Test-Path -LiteralPath (Join-Path $p.DirectoryName ("{0} ({1}){2}" -f $p.BaseName,$n,$p.Extension))) { $n++ }
      $candidate = '{0} ({1}){2}' -f $p.BaseName, $n, $p.Extension
      Rename-Item -LiteralPath $p.FullName -NewName $candidate
    }
  }
}
 

2-C. 하위 폴더까지 재귀 처리

 
Get-ChildItem -File -Recurse | Where-Object { $_.BaseName -notmatch ' \(\d+\)$' } |
ForEach-Object {
  Rename-Item $_ -NewName ('{0} (0){1}' -f $_.BaseName, $_.Extension)
}

 

안전하게 미리보기만 하려면 Rename-Item 뒤에 -WhatIf를 붙여 시뮬레이션 후 실제 실행하세요.

반응형

댓글