【问题标题】:Powershell : Quickly count containersPowershell : 快速计数容器
【发布时间】:2015-11-27 09:18:25
【问题描述】:

我想我们都知道 PsIsContainer 方法来检查当前文件是否是文件夹。但是在我的项目中,我需要一种方法来快速了解文件夹中的文件夹数量。我所需要的只是快速获得他们的电话号码。我想写一个看起来像C:\folder;12 的.txt 行。这意味着在带有 -recurse 参数的文件夹中,将有 12 个文件夹。

为了解释原因,当我切断用于分析某些文件夹的程序时,我需要保存我的工作进度。分析文件夹时,结果将写入第二个 .txt。例如,如果一个文件夹被称为 C:\folder\folder1,文件夹将被分析,然后文件夹 1 也将被分析。这使得文件夹在文件中出现 2 次,因为始终写入全名。我想要做的是计算写入 C:\folder 的行数。如果它等于第一个.txt中它的路径下一个数字,则表示该文件已经被分析过,该函数不需要再次执行。

有人有解决方案吗?或者也许是另一个保存进度的想法?因为我真的觉得这样做需要很长时间。

感谢您的帮助。

【问题讨论】:

  • 问题是使用此解决方案,我只能计算文件夹,我不能(或者我不知道如何)在 where-object cmdlet 中设置另一个条件。例如,我想设置一个条件检查我的函数是否返回一个大于某个阈值的数字,我该怎么做? $i=(gci -force -recurse | where-object { $_.PSIsContainer (function1 -gt $threshold) }).Count 不起作用。编辑:好的,我讨厌自己。我明白了,没关系。但是程序执行还是太长了
  • 为了加快速度,您最好使用Get-ChildItem -Force -Recurse -Directory,我相信 PowerShell 3.0 提供了开关 -Directory
  • @Kikopu 基于计数的恢复很棘手,您可能会遇到这样一种情况,即自上次运行以来在 C:\folder 中创建了一个名为“a”的文件夹,您如何决定是否如果您只知道 C:\folder 中的文件夹数,是否已对其进行处理?

标签: powershell count directory


【解决方案1】:

另一种我发现速度更快的方法是使用 cmd 内置的“dir”命令 当然,这是在您不需要子文件夹的情况下(然后您可以在 foreach 循环中运行该函数,或者在这种情况下更改该函数)

Function Get-FolderCount($path)
{
$Dir = cmd /c dir $path /a:d
Return ($Dir[-1] -csplit 'Dir' -replace '\s')[0]
}

我也使用它来测量文件夹大小,使用 /s 开关并获取总大小,这比 powershell 快得多,在交互式 shell 上运行它也快得多...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多