当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell - 计算文件夹中的文件数量

作者:精品下载站 日期:2024-12-14 05:24:31 浏览:15 分类:玩电脑

PowerShell - 计算文件夹中的文件数量


[玩转系统] PowerShell - 计算文件夹中的文件数量

在 PowerShell 中计算文件夹中的文件数量

我们可以通过不同的方式使用 Measure-Object cmdlet 来满足我们的项目需求。但是,在继续之前,有必要了解我们将在本文中使用的不同路径上有多少文件和文件夹。

  • E:\Test 包含三个文件夹(FolderAFolderBFolderC)和四个文本文件 ( File1.txtFile2.txtFile3.txtFile4.txt)。
  • FolderA 包含四个文本文件(File1.txtFile2.txtFile3.txt文件4.txt)
  • FolderB 包含两个文本文件(File1.txtFile2.txt
  • FolderC 有一个文本文件 (File1.txt)

下面让我们以不同的方式练习Measure-Object

使用 Measure-Object 来计算文件和文件夹的数量:

Write-Host ( Get-ChildItem -Path E:\Test | Measure-Object ).Count;

输出 :

7

上面的命令统计了指定路径下的文件和文件夹,因此统计了 E:\Test 文件夹中的 3 个文件夹和 4 个文件。

请注意,它只会计算指定文件夹中的文件,而不计算子文件夹中的文件。要同时计算所有子文件夹中的文件数量,请将 -Recurse 参数与 Get-ChildItem 结合使用。

要仅计算文件夹中的文件,请使用 -File 参数。

使用 Measure-Object 来计算文件和文件夹的数量:

Write-Host ( Get-ChildItem -Path E:\Test -File | Measure-Object ).Count;

输出 :

4

我们使用 -Path 参数来写入所需位置的路径。请记住,如果只有一个位置的路径,我们可以省略 -Path 参数;否则,需要使用 -Path 参数(稍后我们将看到另一个具有多个路径的示例)。

如果我们使用此命令来计算当前目录中的文件和文件夹,我们甚至可以省略位置的路径。为了练习,让我们转到 E:\Test 目录;您可以前往所需位置并使用以下命令。

使用 Measure-Object 来计算文件和文件夹的数量:

Write-Host ( Get-ChildItem | Measure-Object ).Count;

输出 :

7

看,它仍然返回 7。现在,这个命令是如何工作的?让我们了解从 Measure-Object cmdlet 开始计算对象的属性值。我们用它来计数物体;在我们的例子中,对象可以是文件、文件夹或两者。我们还可以使用它来计算具有给定属性的对象。

我们还可以使用Measure-Object来计算AverageSumMinimum/Maximum 和数值的标准偏差。但是,如果我们使用 String 对象,则可以使用 Measure-Object 来计算单词数、行数和字符数。

我们使用 .Count 来获取文件/文件夹的数量。接下来,我们使用 Write-Host 将自定义输出写入主机,这意味着在 PowerShell 控制台上显示所需的输出。

请记住,Write-Host cmdlet 不会生成管道输出,因此我们无法使用管道(也称为管道表示)将 Write-Host 的输出转发到另一个 cmdlet如|)。

如果您需要使用管道将输出发送到下一个 cmdlet,请使用 Write-Output cmdlet,它可以将给定对象写入管道。接下来,我们有 Get-ChildItem cmdlet,我们可以使用它从一个或多个位置获取项目和子项目。

在 PowerShell 中计算多个文件夹中的文件数量

在上面的代码中,我们使用一个位置来获取项目/子项目;如果您想对多个位置的项目/子项目进行计数,请参阅以下示例。这是强制指定 -Path 参数的地方,因为现在我们有多个路径(路径数组)。

使用 Measure-Object 来计算文件和文件夹的数量:

Write-Host ( Get-ChildItem -Path "E:\Test", "E:\Test\FolderA" | Measure-Object ).Count;

输出 :

11

这次,我们得到了 11,因为上面的命令计算了 E:\Test(包含三个文件夹和四个文本文件)和 E:\Test 中的文件和文件夹。 \Test\FolderA(有四个文本文件)。因此,我们可以使用数组运算符 (@()) 来使用上述命令,如下所示。

使用 Measure-Object 来计算文件和文件夹的数量:

Write-Host ( Get-ChildItem -Path @("E:\Test", "E:\Test\FolderA") | Measure-Object ).Count;

输出 :

11

在 PowerShell 中计算文件夹和子文件夹中的文件数量

要在 PowerShell 中对文件夹和子文件夹中的文件进行计数,请将 -Recurse 参数与 Get-ChildItem cmdlet 结合使用,并使用 Measure-Object cmdlet 进行管道传输。

对于本文,我们在 E:\Test 中只有三个文件夹,但想一想,如果我们有数百个文件夹,使用数组运算符或数组为每个文件夹指定路径会是一个很好的方法吗?文件夹?当然不是!

在这种情况下,我们可以使用 -Recurse 参数来获取所有子容器中的所有项目。

使用 Measure-Object 来计算文件和文件夹的数量:

Write-Host ( Get-ChildItem "E:\Test" -Recurse | Measure-Object ).Count;

输出 :

14

对于上面的输出,它计算了 E:\TestE:\Test\FolderAE:\Test\FolderB 中的所有文件和文件夹> 和 E:\Test\FolderC,但是如果有更多子目录(文件夹内的文件夹)怎么办?在这种情况下,我们可能必须限制 PowerShell 中递归的级别数。为此,我们可以使用 -Depth 参数。

为了练习 -Depth 参数,我们在 FolderA 中创建另一个名为 FolderD 的文件夹,并在 FolderD 中创建四个文本文件>。现在,执行以下命令对并比较两个结果。

使用 Measure-Object 来计算文件和文件夹的数量:

Write-Host ( Get-ChildItem "E:\Test" -Recurse -Depth 1 | Measure-Object ).Count;
Get-ChildItem "E:\Test" -Recurse -Depth 1

输出 :

15

    Directory: E:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:30 PM                FolderA
d-----        12/29/2022   9:13 PM                FolderB
d-----        12/29/2022   9:13 PM                FolderC
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:21 PM                FolderD
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderB

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt

    Directory: E:\Test\FolderC

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt

使用 Measure-Object 来计算文件和文件夹的数量:

Write-Host ( Get-ChildItem "E:\Test" -Recurse -Depth 2 | Measure-Object ).Count;
Get-ChildItem "E:\Test" -Recurse -Depth 2

输出 :

19

    Directory: E:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:30 PM                FolderA
d-----        12/29/2022   9:13 PM                FolderB
d-----        12/29/2022   9:13 PM                FolderC
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:21 PM                FolderD
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA\FolderD

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderB

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt

    Directory: E:\Test\FolderC

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt

看,如果我们有 -Depth 2,我们只能对 E:\Test\FolderA\FolderD 中的文件进行计数;这就是 -Depth 参数的用途。请记住,Get-ChildItem cmdlet 不会显示空子目录;如果与 -Recurse-Depth 参数一起使用,则输出中不会包含空目录。

现在,如果我们只想计算文件数怎么办?我们可以使用 -File 参数来做到这一点,如下所示。

使用 Measure-Object 仅对文件进行计数:

Write-Host ( Get-ChildItem "E:\Test" -Recurse -Depth 2 -File| Measure-Object ).Count;
Get-ChildItem "E:\Test" -Recurse -Depth 2

输出 :

15

    Directory: E:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:30 PM                FolderA
d-----        12/29/2022   9:13 PM                FolderB
d-----        12/29/2022   9:13 PM                FolderC
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:21 PM                FolderD
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA\FolderD

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderB

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt

    Directory: E:\Test\FolderC

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt

仅计算 PowerShell 中文件夹内的文件夹数量

使用下面给出的 -Directory 参数仅对目录进行计数。

使用 Measure-Object 仅对文件夹进行计数:

Write-Host ( Get-ChildItem "E:\Test" -Recurse -Depth 2 -Directory| Measure-Object ).Count;
Get-ChildItem "E:\Test" -Recurse -Depth 2

输出 :

4

    Directory: E:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:30 PM                FolderA
d-----        12/29/2022   9:13 PM                FolderB
d-----        12/29/2022   9:13 PM                FolderC
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        12/29/2022   9:21 PM                FolderD
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderA\FolderD

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt
-a----        12/28/2022  11:33 PM              0 File3.txt
-a----        12/28/2022  11:33 PM              0 File4.txt

    Directory: E:\Test\FolderB

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt
-a----        12/28/2022  11:33 PM              0 File2.txt

    Directory: E:\Test\FolderC

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/28/2022  11:33 PM              0 File1.txt

我们可以使用以下命令来获得更有组织、简短、干净的输出。

使用 Measure-Object 来计算文件和文件夹的数量:

ls -rec | ? {$_.mode -match 'd'} | select FullName, 
@{N='Count';E={(ls $_.FullName | measure).Count}}

输出 :

FullName                          Count
--------                                   -----
E:\Test\FolderA                    5
E:\Test\FolderB                    2
E:\Test\FolderC                    1
E:\Test\FolderA\FolderD            4

在上面的代码栅栏中,measureMeasure-Object 的别名。我们还可以使用ls命令(用于列出目录内容)如下,仅统计父目录中的文件和文件夹,即E:\Test在我们的例子中。

使用 Measure-Object 来计算文件和文件夹的数量:

write-host (ls "E:\Test").Count
<#we can also write as follows#>
(ls).count

输出 :

7
7

在 PowerShell 中按文件夹扩展名对文件进行计数

要在 PowerShell 中按文件夹中的扩展名对文件进行计数,请将 group Extension -NoElementGet-ChildItem cmdlet 结合使用。

这是一个例子:

 Get-ChildItem -Recurse -File | group Extension -NoElement

输出 :

Count Name
----- ----
   11 .txt

这就是如何在 PowerShell 中计算文件夹中的文件数量。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯