PowerShell 5(现已更新至 7)- 检查是否存在多个级别/深度的子文件夹,如果存在,则将其内容上移一级

问题描述 投票:0回答:0

通常我什至不会在没有一些框架的情况下发布,但我不知道从哪里开始。

我有一个包含数百个子文件夹的目录,这些子文件夹应该只有一层深,但有些是两层深:

  • C:\MainDirectory\SubfolderA\
  • C:\MainDirectory\SubfolderB\
  • C:\MainDirectory\SubfolderC\
  • C:\MainDirectory\SubfolderC\SubfolderC1\

我需要递归地遍历 MainDirectory,并且 if 有第二个子级别的文件,然后将这些文件向上移动一个级别(以便 SubfolderC1 的文件实际上放置在 SubfolderC 中)然后这些文件需要附加 SubFolderC1 的名称到文件的前面。

例如:

  • C:\MainDirectory\SubfolderC\SubfolderC1\FileA.type

会变成:

  • C:\MainDirectory\SubfolderC\SubfolderC1FileA.type

我事先不知道子文件夹或文件名,它们可以命名为任何东西。

下面感觉像是一个开始

$source = "C:\MainDirectory"

$levels = Get-ChildItem $source -Directory -Recurse | ForEach-Object {$_.PSPath.Split('\').Count}
if ($levels -gt 3) {
}

但我不知道如何将结果用于任何有意义的事情。

编辑以添加进度。这似乎至少告诉我什么目录超过了阈值:

Get-ChildItem $source -Directory -Recurse | ForEach-Object {$path = $_.FullName; $levels = $_.PSPath.Split('\').Count;
if ($levels -gt 3){
Write-Output $path
} 
}

现在我只需要使用 $path 来获取相应的子文件,将其向上移动一个目录,根据其以前的父文件夹重命名它。

if-statement move subdirectory powershell-7.0
© www.soinside.com 2019 - 2024. All rights reserved.