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

[玩转系统] 如何使用 PowerShell 获取 ChildItem Cmdlet

作者:精品下载站 日期:2024-12-14 18:43:43 浏览:13 分类:玩电脑

如何使用 PowerShell 获取 ChildItem Cmdlet


PowerShell Get ChildItem cmdlet 从指定位置检索子项目。该 cmdlet 主要用于检索文件和文件夹,但也可用于获取注册表项和证书。

该 cmdlet 的真正优势在于我们拥有的过滤选项。我们可以使用不同的过滤器来仅选择特定的子项,并确定我们想要检索或不检索多少个嵌套级别。

在本文中,我们将了解如何在 PowerShell 中使用 Get ChildItem cmdlet 以及如何使用不同的筛选选项。

PowerShell 获取 ChildItem

如果您运行不带任何参数的 Get-ChildItem cmdlet,那么它将获取当前工作目录中的所有项目。它不会获取嵌套项目、隐藏文件或系统文件。仅第一级的文件和文件夹。因此,在使用 cmdlet 时,使用正确的参数非常重要。

通过 Get-ChildItem cmdlet(或其简写 gci),我们可以使用以下参数:

-Path

指定从中获取子项的路径

-Filter

过滤项目的最有效方法

-Include

仅获取路径中指定的项目。可以与通配符一起使用

-Exclude

从路径中排除指定的项目。可以与通配符一起使用

-Recurse

还可以通过子目录进行搜索

-Depth

确定要包含的子目录级别的数量

-Force

还返回隐藏文件和系统文件

-Name

仅返回项目的名称

-Directory

仅返回目录

-File

仅返回文件

-Hidden

只获取隐藏物品

-Readonly

只获取只读项目

要简单地从指定位置获取文件,您可以使用 -path 参数:

Get-ChildItem -Path C:\Temp

[玩转系统] 如何使用 PowerShell 获取 ChildItem Cmdlet

这将仅返回所选目录中的项目,而不返回子文件夹中的项目。

包含具有递归和深度的子目录

因此,我们要查看的第一个参数是 -Recurse-Depth 参数。这些参数还允许我们包含子文件夹中的项目。默认情况下,-Recurse 参数将遍历所有嵌套文件夹:

Get-ChildItem -Path C:\Temp -Recurse

为了限制这一点,我们可以包含参数-深度。这将需要一个数字来指定它应该通过子文件夹的深度。在下面的屏幕截图中,我还包含了 -Directory 参数和 -Name 参数。第一个仅获取目录,后者仅返回文件夹名称,而不是完整的对象:

Get-ChildItem -Path C:\Temp -Recurse -Depth 1 -Directory -name

[玩转系统] 如何使用 PowerShell 获取 ChildItem Cmdlet

使用过滤器

对于此 cmdlet,筛选器比其他参数更有效。例如,当您使用 -Ininclude 时,过滤器将在 PowerShell 检索到所有对象后完成。然而,过滤器被传递到 .NET API 来过滤掉对象,从而使其速度更快。

因此过滤器可用于仅获取特定的文件类型或文件夹。该过滤器并不是很高级,我们只能在字符串中使用 *? 通配符。例如,要获取所有包含单词 oct 的文件,我们可以这样做:

Get-ChildItem -Path C:\Temp -Filter "*oct*" -Recurse

[玩转系统] 如何使用 PowerShell 获取 ChildItem Cmdlet

我们还可以将过滤器应用于文件类型,例如,要获取所有 .log 文件,我们可以简单地过滤 *.log 上的文件名:

Get-ChildItem -Path C:\Temp -Filter "*.log" -Recurse -Name

# Result
log-file 23 oct 22.log
log-file 24 oct 22.log
log-file 25 oct 22.log
log-file 26 oct 22.log
log-file 27 oct 22.log
log-file 30 sep 22 readonly.log
log-file 30 sep 22.log
folder b\subfolder log-file.log

该过滤器还可以用于目录,只需指定要包含在过滤器中的文件夹名称的一部分:

Get-ChildItem -Path C:\Temp -Filter "folder *" -Recurse -Name

# Result
folder a
folder b
folder c

包含和排除项目

尽管过滤器参数是过滤项目的最有效方法,但它也有其局限性。 Get-ChildItem 中的过滤器仅接受单个字符串。例如,您无法获取所有 .txt.log 文件。这就是 -Include-Exclude 参数的用武之地。它们接受要包含或排除的一个或多个字符串的数组。

例如,要获取所有日志和txt文件,我们可以这样做:

Get-ChildItem -Path C:\Temp\* -Include ("*.log","*.txt") -Name

[玩转系统] 如何使用 PowerShell 获取 ChildItem Cmdlet

请注意,我们需要将 * 添加到路径中以包含所有项目。另外,括号不是必需的,但个人更喜欢它,因为它更容易阅读代码。

排除参数返回所有结果,但与指定模式匹配的文件除外。因此,如果我们更改前面示例中的 include 参数,则结果将是:

Get-ChildItem -Path C:\Temp\* -exclude ("*.log","*.txt") -Name

# Results
empty folder
folder a
folder b
folder c
test.csv

仅返回文件或目录

我们可以使用的另一个使用参数是 -File-Directory 参数。这些参数确保结果中仅返回文件或目录。例如,如果你想获取一个文件夹的完整文件夹结构,那么可以简单地使用下面的命令:

Get-ChildItem -Path C:\Temp\ -Recurse -Directory -Name

# Result
empty folder
folder a
folder b
folder c
folder a\subfolder a-a
folder a\subfolder a-b
folder b\subfolder b-a
folder b\subfolder b-b
folder c\subfolder c-a
folder c\subfolder c-a(1)

您还可以将这些参数与其他参数结合使用,例如 -include-filter

获取只读文件、系统文件和隐藏文件

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

取消回复欢迎 发表评论:

关灯