
したがって、ダウンロードしたファイルを含むフォルダー構造は次のようになります (質問とは関係のない機密データが含まれているため、手動で少し編集しました。拡張子も一般的ではなく、関連性もありません)。
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]
.
.
.
ご覧のとおり、実際のファイルの前には不要なフォルダーがたくさんあります。
バッチを使用して「中間フォルダー」をプログラムで削除することは可能ですか? 基本的に、フォルダーのみを含むフォルダーを削除し、サブコンテンツを 1 レベル上に移動したいと考えています。 どのように実行しますか (できれば組み込みの Windows ツールのみを使用)?
この小さな抜粋では、最初の 2 つの親「Example #」フォルダーを削除するだけですべてが解決しますが、ネストの深さは時々上下に変化します。フォルダーに 1 つのフォルダーのみが含まれている場合は、削除する「中間者」ですが、実際のファイル (または実際の組織である複数のフォルダー) がある場合は、そのままにしておく必要があります。
ありがとう!
編集: 3 重の (ただし場合によっては他の深さの) ネストを削除して、次のような結果を実現しようとしています。
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
、ブロック全体をコピーしてパワーシェルコンソールウィンドウ。