如何使用Powershell检查具有多个扩展名的文件?

如何使用Powershell检查具有多个扩展名的文件?,powershell,file,Powershell,File,我想检查是否存在具有多个扩展名的文件。我试过这种方法,效果很好。但是我需要一个简单的方法来完成这个过程。有人能给我建议如何改进这个过程吗?非常感谢你 $Data = "D:\Folder" if (!(Test-Path $Data\*.que)) { if (!(Test-Path $Data\*.pro)) { if (!(Test-Path $Data\*.err)) { if

我想检查是否存在具有多个扩展名的文件。我试过这种方法,效果很好。但是我需要一个简单的方法来完成这个过程。有人能给我建议如何改进这个过程吗?非常感谢你

$Data = "D:\Folder"

if (!(Test-Path $Data\*.que))
{
     if (!(Test-Path $Data\*.pro))
     {
          if (!(Test-Path $Data\*.err))
          {
               if (!(Test-Path $Data\*.skip))
               {
                    Write-Host "Complete"
               }
               else {

                    Write-Host "Finished, But Not Complete"
               }
          }
          else {

               Write-Host "Finished, But Not Complete"
          }
     }
     else {

          Write-Host ".pro Exist, Not Finished"
     }
}
else {

     Write-Host ".que Exist, Not Finished"
}
您可以
Get ChildItem
获取目录中的文件并仅获取返回对象的扩展属性,然后
Group object
获取目录列表以及每个目录的存在数量


您可以
Get ChildItem
获取目录中的文件,只获取返回对象的扩展属性,然后
Group object
获取目录列表以及每个目录中存在的目录数量

由于您有一些自定义消息,具体取决于文件类型,因此可以通过几种方法来实现这一点。一种方法是将所有内容放入CSV中,并对其进行迭代。为了简化代码,检查文件是否存在似乎是合乎逻辑的。它可能看起来像这样

$CSVData = @'
Extension,NotPresent,Present
que,".que Exist, Not Finished",
pro,".pro Exist, Not Finished",
err,"Finished, But Not Complete",
skip,"Complete","Finished, But Not Complete"
'@ | ConvertFrom-Csv

$Data = "D:\Folder"

$CSVData | foreach {
    if(Test-Path "$Data\*.$($_.extension)")
    {
        Write-Host $_.present
    }
    else
    {
        write-host $_.notpresent
    }
}
除了您实际回复的那一列之外,我将当前列留空。如果您不需要填写这些内容,您可能需要在
写入主机之前检查
$中是否有任何内容

$CSVData = @'
Extension,NotPresent,Present
que,".que Exist, Not Finished",
pro,".pro Exist, Not Finished",
err,"Finished, But Not Complete",
skip,"Complete","Finished, But Not Complete"
'@ | ConvertFrom-Csv

$Data = "D:\Folder"

$CSVData | foreach {
    if(Test-Path "$Data\*.$($_.extension)")
    {
        if($null -ne $_.present)
        {
            Write-Host $_.present
        }
    }
    else
    {
        write-host $_.notpresent
    }
}

由于您有一些根据文件类型定制的消息,因此可以通过几种方法来实现这一点。一种方法是将所有内容放入CSV中,并对其进行迭代。为了简化代码,检查文件是否存在似乎是合乎逻辑的。它可能看起来像这样

$CSVData = @'
Extension,NotPresent,Present
que,".que Exist, Not Finished",
pro,".pro Exist, Not Finished",
err,"Finished, But Not Complete",
skip,"Complete","Finished, But Not Complete"
'@ | ConvertFrom-Csv

$Data = "D:\Folder"

$CSVData | foreach {
    if(Test-Path "$Data\*.$($_.extension)")
    {
        Write-Host $_.present
    }
    else
    {
        write-host $_.notpresent
    }
}
除了您实际回复的那一列之外,我将当前列留空。如果您不需要填写这些内容,您可能需要在
写入主机之前检查
$中是否有任何内容

$CSVData = @'
Extension,NotPresent,Present
que,".que Exist, Not Finished",
pro,".pro Exist, Not Finished",
err,"Finished, But Not Complete",
skip,"Complete","Finished, But Not Complete"
'@ | ConvertFrom-Csv

$Data = "D:\Folder"

$CSVData | foreach {
    if(Test-Path "$Data\*.$($_.extension)")
    {
        if($null -ne $_.present)
        {
            Write-Host $_.present
        }
    }
    else
    {
        write-host $_.notpresent
    }
}