【问题标题】:adding text to folders with no files/and with no subfolders with files将文本添加到没有文件的文件夹/没有包含文件的子文件夹
【发布时间】: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


【解决方案1】:

试试这个:

    Get-ChildItem "c:\temp" -recurse -directory -Force | where Name -Notlike "NA -*" |
 select *, @{N="HasChild";E={((Get-ChildItem $_.FullName -recurse -force -file).Count -ne 0)}} | where {! $_.HasChild}

【讨论】:

  • 谢谢,但仍有问题。我刚刚意识到我没有管理员权限或Set-ExecutionPolicy。这可能是问题的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
相关资源
最近更新 更多