网站搜索

PowerShell 查找文件(使用 Get-ChildItem 搜索文件)


PowerShell 中的 Get-ChildItem cmdlet 用于获取一个或多个指定位置中的项目。使用 Get-ChildItem,您可以查找文件。您可以轻松地按名称和位置查找文件、搜索文件中的字符串或使用匹配模式查找文件位置。

通常,我们将文件存储在驱动器上不应放置的任何位置,几个月后,我们将大量文件复制到不同的位置,并且保持无组织的方式。

如果我们尝试查找存储在驱动器上任何位置的文件,则使用手动搜索或 Windows 提供的带有通配符的搜索过滤器会花费大量时间并且更加令人沮丧。

在本文中,我将解释在 PowerShell 中查找与模式匹配的文件或按扩展名查找文件的不同且最佳的方法

PowerShell 使用 Get-ChildItem 查找文件

使用 PowerShell Get-ChildItem cmdlet 显示一个或多个位置中的文件或目录列表。

Get-ChildItem cmdlet 为简单或高级通配符提供了更大的灵活性,可以通过搜索模式查找文件。

使用Recurse参数从所有子容器中递归获取项目。您可以限制深度参数来限制递归的级别数。

Cmdlet:获取子项

句法:

Get-ChildItem
   [[-Filter] <string>]
   -LiteralPath <string[]>
   [-Include <string[]>]
   [-Exclude <string[]>]
   [-Recurse]
   [-Depth <uint32>]
   [-Force]
   [-Name]
   [-Attributes <FlagsExpression[FileAttributes]>]
   [-FollowSymlink]
   [-Directory]
   [-File]
   [-Hidden]
   [-ReadOnly]
   [-System]
   [<CommonParameters>]

让我们了解如何使用 PowerShell 按名称、扩展名查找文件,或使用下面给出的不同示例递归查找文件。

你知道吗:在PowerShell中使用IIS获取网站列表!

PowerShell 在当前目录中按扩展名查找文件

在当前目录中按扩展名查找与通配符模式 *.txt 匹配的所有文件

PS C:\Temp> Get-ChildItem *.txt

上面的命令,在当前目录中查找与扩展名.txt匹配的文件

PowerShell 查找驱动器 D:\ 根目录下的所有文件

要查找并列出驱动器 D:\ 位置上存储的所有文件,请使用 Get-ChildItem,如下所示

PS C:\> Get-ChildItem -Path D:\

上面的 Get-ChildItem cmdlet 采用 D:\ 作为路径,并列出存储在该位置的所有目录和文件。它显示带有“模式”、“上次写入时间”和“长度名称”列的结果项。

PowerShell 使用 Recurse 参数递归查找文件

要查找并列出驱动器 D:\ 位置上存储的所有文件,请在 PowerShell 中使用带有 Recurse 参数的 PowerShell Get-ChildItem。

PS C:\> Get-ChildItem -Path D:\ -Recurse

使用recurse参数将列出用户有权访问的所有文件,但是,进行递归操作,如果用户无权访问任何资源项,则会抛出错误。

要在出现错误的情况下继续 Recurse 操作,请使用 ErrorAction 参数和 silentlyContinue 继续其操作。

PS C:\> Get-ChildItem -Path D:\ -Recurse -ErrorAction SilentlyContinue

使用排除参数搜索不匹配的文件

要查找当前目录和子目录中与 PowerShell 通配符 *.exe 不匹配的所有文件,我们可以使用排除参数来完成

PS D:\Temp> Get-ChildItem -Exclude *.exe -Recurse

上述命令,使用 PowerShell 中的 recurse 参数获取子目录中所有文件排除*.exe 文件的列表。

获取目录中与模式匹配的所有文件的列表

获取目录和子目录中与 PowerShell 通配符模式 *.doc、*.docx 匹配的所有文件的列表

PS D:\Temp> Get-ChildItem -Include *.doc,*.docx -File -Recurse -ErrorAction SilentlyContinue

在上面的示例中,Get-ChildItem 使用 Include 参数使用 Recurse 从目录或其子目录中查找 *.doc 或 *.docx 文件>参数。

即使没有错误,也可以使用 ErrorAction stilleContinue 继续查找文件。

上述命令在 PowerShell 中搜索文件并获取目录中所有文件的列表。

查找文件子目录中的所有项目与特定过滤器匹配

使用 -Filter 参数从子目录中获取与过滤器 *.txt 匹配的所有文件的列表

PS D:\Temp> Get-ChildItem -Filter *.txt -Recurse

上述 Get-ChildItem 命令使用 Recurse 参数在文件夹和子文件夹中递归迭代,并使用 *.txt 过滤参数以仅获取 *.txt 文件扩展名文件。

上面的 PowerShell 脚本递归地查找具有扩展名的文件。

酷提示:使用 PowerShell 替换字符串中的文本!

PowerShell查找包含字符串的文件名

要查找给定目录或子目录中包含字符串的所有文件,请使用以下命令

PS D:\Temp> Get-ChildItem -Recurse | Where {$_.Name -match 'Replace'} | Select Fullname

FullName                  
--------                  
D:\Temp\Replace-Method.txt

在上面的例子中,Get-ChildItem使用Recurse参数递归查找所有文件。

使用 Where-Object cmdlet 比较与“替换”匹配的名称属性并返回文件的全名。

在上面的脚本中,在文件中搜索字符串并获取与该字符串匹配的文件名。

我们还可以使用 Get-ChildItem alias gci 来查询包含字符串的文件名,如下所示

PS D:\Temp> gci -Recurse | Where {$_.Name -match 'Replace'} | Select Fullname

FullName                  
--------                  
D:\Temp\Replace-Method.txt

PowerShell 在包含字符串的目录中查找文件

要查找包含字符串的目录中的所有文件,请使用以下命令

PS D:\Temp> Get-ChildItem -Recurse | Where {$_.DirectoryName -match 'Debug'} | Select Fullname

上面的例子中,Get-ChildItem使用Recurse参数递归查找Directory中的所有文件

使用 Where-Object cmdlet 比较与“Debug”匹配的 DirectoryName 属性,并返回该目录中文件的全名。

我们还可以使用PowerShell Get-ChildItem alias gci 来查询并列出目录名称中包含字符串的所有文件,如下所示

PS D:\Temp> gci -Recurse | Where {$_.DirectoryName -match 'Debug'} | Select Fullname

PowerShell 通过通配符查找文件

查找目录或子目录中与 PowerShell 通配符匹配的所有文件

PS D:\Temp> Get-ChildItem | Where-Object { $_.Name -match '[a-z].txt$' }


    Directory: D:\Temp


Mode                LastWriteTime         Length Name                                                        
----                -------------         ------ ----                                                        
-a----       10-07-2021     11:11            196 Replace-Method.txt  

在上面的示例中,它使用 PowerShell 通配符 [a-z].txt$查找文件并获取所有文件的列表。

酷提示:PowerShell 中的 ErrorAction 和 ErrorVariable 参数!

PowerShell 查找早于特定日期的文件

要查找早于特定天数的文件,请使用 PowerShell Get-ChildItem 获取文件对象并将文件创建日期与当前日期(15 天)进行比较。

 Get-ChildItem -File | Where-Object {$_.CreationTime -lt (Get-Date).AddDays(-15)} | Select Name, CreationTime | sort CreationTime -Descending

在上面的 PowerShell 脚本中,第一个命令获取文件对象并将输出传递给第二个命令。

第二个命令 Where-Object 使用 Get-Date cmdlet 将文件创建日期与当前日期(15 天)进行比较,并将输出传递给第三个命令。

第三个命令选择文件名和文件创建日期时间格式,并将输出传递给第四个命令。

在最后一个命令中,对文件创建日期-时间降序排序,并获取 15 天前的文件列表。

结论

我希望上述有关使用 PowerShell Get-ChildItem cmdlet 查找与搜索模式匹配的文件或按扩展名或名称查找文件的文章对您有所帮助。

我尝试解释按通配符搜索文件、按名称搜索文件、按位置或目录搜索文件或仅获取文件系统中的文件夹的不同方法。

您可以在 ShellGeek 主页上找到有关 PowerShell Active Directory 命令和 PowerShell 基础知识的更多主题。

相关文章