无法将符合特定条件的子目录移动到相关文件夹中。

时间:2016-03-01 00:56:03

标签: powershell

我正在使用的文件夹结构如下所示:

-Clients
 -Walmart
   -00001
   -00001
   -00001
   -00001
   -Letters
   -Numbers

 -Lowes
   -00001
   -00001
   -00001
   -00001
   -Letters
   -Numbers

在Clients目录的每个子文件夹(本例中为Walmart& Lowes)中,我想将名称中包含数字的每个文件夹移动到“Numbers”子文件夹中。

到目前为止,我已经设法将它们放在一起:

$source = "Clients"
$dirs = dir $source
foreach ($folder in $dirs) | Where-Object {$_.Name -match "\d"}
{
    Move -Destination $folder\Numbers
}

但这不起作用,这是我所期待的。出于某种原因,我很难找到如何告诉它我的目的地是什么。解决这个问题的最佳方法是什么?我错过了一些简单的东西,还是让它变得比它需要的更难?我感谢任何和所有的帮助!

1 个答案:

答案 0 :(得分:1)

您的where代码段错位且语法不正确。它应该在循环内部检查每个客户端子目录的匹配。您可以使用其他几个选项,但这个选项应该可以解决问题。

$source = "Clients"
# Get all the clients 
$clients = Get-ChildItem $source -Directory

# Traverse each clients folder looking for mumbers 
$clients | ForEach-Object{
    $clientFolder = $_
    Get-ChildItem $clientFolder.FullName -Directory | 
        Where-Object{$_.Name -match "\d"} | 
        Move-Item "$clientFolder\Numbers" 
}

我们不会检查-destination是否存在,因此可能是错误的来源。如果他们总是存在,那么你不必担心。以防万一仍然是一个很好的做法。

$clientNumbersFolder = "$clientFolder\Numbers"
If(-not Test-Path $clientNumbersFolder){New-Item -Path $clientNumbersFolder -ItemType Directory | Out-Null}
Move-Item "$clientFolder\Numbers"