使用 PowerShell 过滤文件和文件夹

Marion Paul Kenneth Mendoza 2023年1月30日 2022年5月16日
  1. 在 PowerShell 中使用 Get-ChildItem Cmdlet 过滤文件
  2. Get-ChildItem 别名
  3. 在 PowerShell 中使用 Get-ChildItem Cmdlet 获取子目录中的所有文件
  4. 在 PowerShell 中使用 Get-ChildItem Cmdlet 过滤具有特定条件的文件
使用 PowerShell 过滤文件和文件夹

在某些情况下,我们需要检查文件是否存在于特定位置或目录中。虽然我们可以使用旧命令 dir,但仅导出特定文件是不够的。对于这个用例,我们可以使用 Windows PowerShell 的 Get-ChildItem cmdlet。

本文将讨论 PowerShell Get-ChildItem cmdlet,我们将使用它来获取目录中的所有项目并利用其过滤器开关参数。

Windows PowerShell Get-ChildItem cmdlet 获取特定位置或目录中的子项。例如,在 cmdlet 中指定的位置可以是文件系统目录、注册表或证书存储。此外,提到的子项可以是另一个目录、子文件夹或文件。

Get-ChildItem -Path C:\Temp

在上述命令中,Get-ChildItem 从使用 -Path 参数指定的路径获取子项。

Get-ChildItem cmdlet 执行时,在 PowerShell 控制台上显示文件、目录及其 ModeLastWriteTimeLength(文件大小)和 Name 属性。

Mode                 LastWriteTime         Length Name                                
----                 -------------         ------ ----
d----l        18/01/2022   8:52 pm                WindowsPowerShell
d----l        20/12/2021   3:36 pm                Zoom
-a---l        30/12/2020   3:23 pm          (151) backup phrase.txt
-a---l        17/06/2021   3:13 am       (410049) CEF1750.pdf
-a---l        16/05/2020   3:32 am          (677) default.cpu1
-a---l        21/08/2019   9:06 am         (2240) Default.rdp
-a---l        26/05/2021   8:24 am        (63399) e-sig.jpg
-a---l        09/03/2020  10:48 pm          (143) fan config.sfsm
-a---l        19/09/2020  12:07 pm    (279515089) MCSA.rar

在 PowerShell 中使用 Get-ChildItem Cmdlet 过滤文件

我们可以使用 -File 开关参数仅返回路径或目录内的文件。

示例代码:

Get-ChildItem -Path C:\Temp -File

输出:

Mode                 LastWriteTime         Length Name                                
----                 -------------         ------ ----
-a---l        30/12/2020   3:23 pm          (151) backup phrase.txt 
-a---l        17/06/2021   3:13 am       (410049) CEF1750.pdf
-a---l        16/05/2020   3:32 am          (677) default.cpu1
-a---l        21/08/2019   9:06 am         (2240) Default.rdp
-a---l        26/05/2021   8:24 am        (63399) e-sig.jpg
-a---l        09/03/2020  10:48 pm          (143) fan config.sfsm
-a---l        19/09/2020  12:07 pm    (279515089) MCSA.rar

Get-ChildItem 别名

Windows PowerShell 为 Get-ChildItem cmdlet 使用默认的内置别名 gci。就像下面的示例片段一样,你可以使用别名而不是 cmdlet 来实现更快和无缝的脚本编写。

示例代码:

gci -Path C:\Temp -File

在 PowerShell 中使用 Get-ChildItem Cmdlet 获取子目录中的所有文件

如果我们想获取目录和子目录中的所有文件,请使用 -Recurse 开关参数。

示例代码:

gci -Path C:\Temp -Recurse - Force -File
注意
-Force 参数允许 cmdlet 获取用户无法访问的项目,例如系统文件或隐藏文件。Force 参数不会覆盖安全限制。供应商之间的实施有所不同。

在 PowerShell 中使用 Get-ChildItem Cmdlet 过滤具有特定条件的文件

使用 -Filter 参数,我们可以使用单个表达式过滤掉结果。 -Filter 参数不需要 -Path 参数,因为它将使用你当前的工作目录。

示例代码:

gci -Filter C:\Temp\* -Filter *.txt 

我们还可以使用 -Include 开关参数,它接受多个条件,这是 -Filter 参数的一个绝佳优势。但是,请记住 -Include 参数需要 -Path 参数出现在表达式中。

示例代码:

gci -Path C:\Temp\* -File -Include CEF*.pdf, *.txt 

除了接受多个条件之外,-Include 参数与正则表达式配合得很好,因此使其成为比 -Filter 参数更通用的方法。

输出:

Mode                 LastWriteTime         Length Name                                
----                 -------------         ------ ----
-a---l        30/12/2020   3:23 pm          (151) backup phrase.txt
-a---l        17/06/2021   3:13 am       (410049) CEF1750.pdf
注意
使用 -Include 开关参数时,路径的末尾应包含通配符星号 (*)。此通配符表示你正在查询具有在 -Include 参数中定义的特定扩展名的所有路径子项。
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相关文章 - PowerShell File

相关文章 - PowerShell Directory