比较不带扩展名的文件并从Powershell中的文件夹中删除文件

比较不带扩展名的文件并从Powershell中的文件夹中删除文件,powershell,delete-file,compareobject,Powershell,Delete File,Compareobject,我比较文件夹中的文件。在此文件夹中,某些文件以两种文件格式存在(filename1.jpg、filename1.bmp,…),而某些文件仅以一种格式存在。 我尝试查找所有仅以.bmp格式存在的文件并将其删除 到目前为止,我得到的代码是: $jpg = Get-ChildItem "C:\..\" -File -Filter *.jpg | ForEach-Object -Process {[System.IO.Path]::GetFileNameWithoutExtension($_)} $bm

我比较文件夹中的文件。在此文件夹中,某些文件以两种文件格式存在(filename1.jpg、filename1.bmp,…),而某些文件仅以一种格式存在。 我尝试查找所有仅以.bmp格式存在的文件并将其删除

到目前为止,我得到的代码是:

$jpg = Get-ChildItem "C:\..\" -File -Filter *.jpg | ForEach-Object -Process {[System.IO.Path]::GetFileNameWithoutExtension($_)}
$bmp = Get-Childitem "C:\..\" -File -Filter *.bmp | ForEach-Object -Process {[System.IO.Path]::GetFileNameWithoutExtension($_)}

Compare-Object $jpg $bmp | where {$_.SideIndicator -eq  "=>"} 
这列出了我要查找的文件,但删除它们时遇到问题。我试过一些东西,比如:

Compare-Object $jpg $bmp | where {$_.SideIndicator -eq  "=>"} | ForEach-Object {
    Remove-Item  "C:\..\($_.FullName)"
    }

但是没有成功。有人知道我如何解决这个问题吗?

在foreach中,变量不是文件,而是比较的结果

试试这个:

$a = Get-ChildItem "D:\a" -File -Filter *.jpg
$b = Get-Childitem "D:\b" -File -Filter *.bmp
Compare-Object $a.BaseName $b.BaseName | where {$_.SideIndicator -eq  "=>"}  | foreach {
    $name = $_.InputObject
    $File = $b.Where({$_.BaseName -eq $name})

    if ($File.Count -gt 1) {
        throw "Conflict, more than one file has the name $name"
    } else {
        Remove-Item -Path $File.FullName
    }
}