我正在使用的文件夹结构如下所示:
-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
}
但这不起作用,这是我所期待的。出于某种原因,我很难找到如何告诉它我的目的地是什么。解决这个问题的最佳方法是什么?我错过了一些简单的东西,还是让它变得比它需要的更难?我感谢任何和所有的帮助!
答案 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"