【发布时间】:2011-08-04 02:41:00
【问题描述】:
我在装有最新服务包的 Windows SBS 2008 机器上使用 PowerShell 2.0。我有一个两行脚本,可以找到目录中的所有空文件夹:
$a = Get-ChildItem E:\File_Server -recurse | Where-Object {$_.PSIsContainer -eq $True}
$a | Where-Object {$_.GetFiles().Count -eq 0} | [what now?!]
第二行找到所有空的文件夹,但是我在最后一个管道上被难住了。这是我迄今为止尝试过的(请记住,在上面第二行的第二个管道之后尝试了以下内容):
$_.move(F:\path) 是的,我试过了。是的,我是 PowerShell 菜鸟。当然,我收到了错误“表达式只允许作为管道的第一个元素。”
move-item -destination F:\Path 我收到了有史以来最糟糕的错误:“移动项目:源路径和目标路径必须具有相同的根。移动将无法跨卷工作。”严重地?那是什么白痴限制?!继续……
copy-item -destination F:\empty_folders 显然我可以通过使用copy-item 绕过移动项目的限制,然后使用remove-item。然而,没有这样的运气。我首先使用copy-item 开始脚本。 PowerShell 没有抛出任何错误,也没有做任何其他事情。它只是在那里坐了一个小时的大部分时间。没有移动目录。
总结: 如何获取我拥有的空文件夹列表,并使用 PowerShell 将这些空目录移动到其他位置(跨卷!)在移动后删除原件?请注意“使用 PowerShell”的警告,因为我已经考虑过将 RoboCopy 添加到组合中,但希望将其保留在 PowerShell 中。
【问题讨论】:
-
你是故意避开
foreach或ForEach-Object吗? -
您是否希望为目标位置的空文件夹维护相同的目录结构?如果是这样,您如何知道路径中的父文件夹是否包含任何文件?例如,如果您有 c:\folder1\folder2\folder3\folder4 和 folder1 和 folder2 包含文件,但 folder3 和 folder4 没有,文件夹 3 是否算作“空”文件夹?
-
@jscott 我的印象是
ForEach-Object是不必要的,因为Where-Object一次只喂下一个管道项目。 -
@mjolinor 我曾希望保持目录结构是的。然而,这篇文章中的障碍让我无法想得那么远。我想文件夹 3 不会被视为空文件夹。也许检查文件夹的大小会更好,如果它为零则认为它是空的?
标签: windows powershell powershell-2.0