【发布时间】:2019-09-23 01:30:04
【问题描述】:
我有从网上找到的不同来源汇总的代码。我相信,该代码应该搜索并找到所有没有文件/子文件夹没有文件的文件夹,然后将文本“NA -”添加到这些文件夹的开头。当我检查时,看起来一些显然是空的文件夹没有被标记。是我缺少的东西吗?任何帮助将不胜感激,谢谢。
$CMfolder=get-childitem "Z:\folder\subfolder\subfolder2" -Recurse |
Where-Object {$_.PsIsContainer -eq $true}
$CMfolder | Where-Object {$_.GetFiles().Count -eq 0 -and
$_.GetDirectories().count -eq 0} |
where-object {$_.Name -Notlike "NA -*"} |
Rename-Item -NewName {"NA -" + $_.Name}
【问题讨论】:
-
代码查找空目录,即既不包含文件也不包含子目录的目录(无论这些子目录是否为空)。虽然可以优化代码,但它在功能上看起来是正确的;唯一需要注意的是
Get-ChildItem命令不会包含 hidden 子目录;为此,请使用-Force。如果您仍然遇到无法解释的行为,请尝试提供MCVE (Minimal, Complete, and Verifiable Example) 或尽可能接近的。 -
相比之下,如果您正在寻找 递归 空目录 - 即那些不包含任何内容或仅包含空子目录的目录,递归 - 请参阅 stackoverflow.com/a/42861120/45375
-
@mklement0 感谢您提供的内容。在我前进的过程中提供了很好的信息。您的“使用 PowerShell 计算文件夹深度”是我想做的。尝试运行它我发现我没有管理员权限(也没有
Set-ExecutionPolicy的权限)。我明白了它的要点。我可以给它一个路径$LiteralPath,它会检查是否有文件$haveFiles = [bool]...并通过文件夹进行递归搜索……我什至不会像我理解的那样行事。我还是个新手,我怎么能不把它写成“参数化”脚本?感谢您的帮助。 -
您可以使用
Set-ExecutionPolicy -Scope CurrentUser ...为您更改执行策略,这不需要管理员权限。要使递归工作,您确实需要定义的功能单元(脚本或函数)。 -
并不是我建议您规避法规,但在紧要关头,您可以使用 PowerShell CLI 绕过有效的执行策略;例如,
powershell -ExecutionPolicy Bypass -Command "'hi'; get-date"或powershell -ExecutionPolicy Bypass -File someScript.ps1
标签: powershell directory file-management rename-item-cmdlet