Power shell显示包含特定名称的文件夹中的文件

时间:2016-05-15 13:48:24

标签: powershell

我有一个pdf文件名列表,我已逐行存储在文本文件中,如下所示。

322223491.pdf
322223492.pdf
322223493.pdf

文本文件的名称为inclusions.txt

我将此传递给变量:

$inclusion = get-content .\inclusions.txt

现在我想查看并显示文件夹(C:\users\xyz)是否包含$inclusions变量中传递的文件我该怎么做?

PS C:\users\xyz> Get-childitem 

命令显示以下内容

Mode      LastWritetime  Name

Name列是我感兴趣的属性,我想要比较我的包含列表,如果它在列表中找到,那么我想在Powershell终端中显示它们

PS C:\users\xyz> Get-childitem | Select-Object -Property Name

就我而言,我不知道如何通过将过滤后的数据与$inclusions变量进行比较来进一步显示过滤后的数据。

此外,如果文件与包含文本文件中的名称匹配,我想删除这些文件。因此,如果名称与包含列表中的名称相同,则遍历文件夹中所有文件的最终目标,如果是,则删除这些特定文件。

任何帮助都将不胜感激。

非常感谢

1 个答案:

答案 0 :(得分:0)

使用Where-Object过滤条件:

Get-ChildItem |Where-Object { $inclusion -contains $_.Name }

如果您只对文件名本身感兴趣,请使用Select-Object -ExpandProperty获取每个文件的名称:

Get-ChildItem |Where-Object { $inclusion -contains $_.Name } |Select-Object -ExpandProperty Name

如果您想根据某个文件夹是否包含$inclusion中的一个或多个文件来执行某些操作,请使用if声明:

$folderPath = "C:\users\xyz\folder\of\interest"
if(@(Get-ChildItem $folderPath |Where-Object {$inclusion -contains $_.Name}).Count -ge 1)
{
    Write-Host "Folder $folderPath contains at least one of the inclusion files"
}