
因此,我有一個包含一些下載的資料夾結構,如下所示(我手動對其進行了一些編輯,因為它包含一些與問題無關的敏感資料。擴展名也不常見,也不相關):
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 工具)?
在這個小摘錄中,只需刪除前兩個父「Example #」資料夾即可解決所有問題,但嵌套深度有時會上下變化。如果一個資料夾僅包含一個資料夾,那麼它是我想要刪除的“中間人”,如果存在實際文件(或多個資料夾,這意味著它是實際的組織),則它應該保留在那裡。
謝謝你!
編輯:我正在嘗試實現類似的目標,刪除三重(但有時是其他深度)嵌套:
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
,可以將整個區塊複製並貼上到電源外殼控制台視窗。