比较没有扩展名的文件并从 Powershell 中的文件夹中删除文件
Compare files without extension and delete files from folder in Powershell
我比较文件夹内的文件。在此文件夹中,一些文件以两种文件格式(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
}
}
我比较文件夹内的文件。在此文件夹中,一些文件以两种文件格式(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
}
}