
따라서 다음과 같은 일부 다운로드가 포함된 폴더 구조가 있습니다. (질문과 관련이 없는 일부 민감한 데이터가 포함되어 있기 때문에 수동으로 약간 편집했습니다. 확장자도 일반적이지 않으며 관련도 없습니다.)
C:.
│ [FILENAME].[ext]
│
├───Example 1
│ └───Example 1
│ └───Example 1
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ └───Folder.[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ ├───test1
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ ├───test10
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ ├───test11
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ ├───test12
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ ├───test2
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│
│
├───Example 2
│ └───Example 2
│ └───Example 2
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ ├───Folder.[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ └───Setup
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│
├───Example 3
│ └───Example 3
│ └───Example 3
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ └───Folder.[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│
├───Example 4
│ └───Example 4
│ └───Example 4
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
│ │
│ └───Folder.[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
│ [FILENAME].[ext]
.
.
.
보시다시피 실제 파일 사이에 불필요한 폴더가 많이 있습니다.
일괄 처리를 사용하여 "중간 폴더"를 프로그래밍 방식으로 제거할 수 있습니까? 기본적으로 폴더만 포함된 폴더를 모두 제거하고 하위 콘텐츠를 한 수준 위로 가져오고 싶습니다. 어떻게 수행할 수 있습니까(기본 제공 Windows 도구만 사용하는 것이 바람직함)?
이 작은 발췌문에서는 단순히 처음 두 개의 상위 "예제 #" 폴더를 제거하면 모든 문제가 해결되지만 중첩 깊이는 때때로 위아래로 다양합니다. 폴더에 폴더가 하나만 포함되어 있는 경우, 실제 파일(또는 실제 조직을 의미하는 폴더가 두 개 이상)이 있는 경우 제거하고 싶은 것은 "중개자"입니다.
감사합니다!
편집: 나는 삼중(때때로 다른 깊이) 중첩을 제거하여 이와 같은 것을 달성하려고 합니다.
C:.
├───Example 1
│ │ [FILENAME].[ext]
│ │ [FILENAME].[ext]
.
.
.
답변1
~ 안에파워셸, 간단한 재귀 함수로 파일이 포함된 첫 번째 하위 폴더를 찾을 수 있습니다. 그런 다음 해당 폴더의 콘텐츠를 최상위 컨테이너로 이동할 수 있습니다. 이후에는 빈 폴더를 삭제할 수 있습니다. $Top
폴더 경로를 반영하도록 편집하세요 .
$Top = 'c:\TopFolder'
Function Get-NonEmptyPath ($FPath) {
If ( -not (gci -LiteralPath $FPath -file) ) {
$Return = Get-NonEmptyPath ( gci -LiteralPath $FPath -Directory ).FullName
} Else { $Return = $FPath }
$Return
}
Filter Get-LiteralPath { $_ | Select @{ N='LiteralPath'; E={ $_.FullName }}}
( Get-ChildItem $Top -Directory ).FullName | ForEach{
If (( $Buried = Get-NonEmptyPath $_ ) -ne $null ) {
gci -LiteralPath $Buried | Get-LiteralPath | Move-Item -Destination $_
For ( $Empty = $Buried ; $Empty -ne $_ ; ( $Empty = Split-Path -LiteralPath $Empty )) {
Remove-Item -LiteralPath $Empty
}
}
}
편집 후 $Top
전체 블록을파워셸콘솔 창.