Powershell:删除具有不同父文件夹名称的文件夹内的文件

时间:2013-04-19 08:02:07

标签: file powershell directory get-childitem

我想使用此选项删除具有特定扩展名的文件(在我的情况下为.cfg),并使用其文件夹的不同名称。例如,如果我有一个名为MYFOLDER的文件夹,并且在这两个文件MYFOLDER.cfg和otherfile.cfg中,应该删除(递归)其他文件。

这就是我现在所拥有的一切:

$folder = Get-ChildItem * -exclude *.* -name -recurse
$file = Get-ChildItem * -include *.cfg* -name -recurse | % { [IO.Path]::GetFileNameWithoutExtension($_) }
#$folder | ForEach-Object {Compare-Object $folder $file | <DELETE file with different name>}

我如何制作最后一行?

提前致谢。问候。

3 个答案:

答案 0 :(得分:0)

这将为你做到:

Get-ChildItem -Recurse -Include *.cfg  | % { If ( $_.Name.Split(".")[0] -ne $_.Directory.Name ) {$_.Delete()}}

答案 1 :(得分:0)

双衬里,但你可以把它变成单衬里;)

$FolderName = (Get-Location).Path.Split("\")[(Get-Location).Path.Split("\").Count -1]
$Files = Get-ChildItem | Where-Object {$_.Extension -ne ".cfg" -or $_.Name.Split(".")[0] -ne $FolderName} | Remove-Item -Recurse

但是当文件的名称包含一个点(例如File.Name.cfg)

时,此代码以及来自Musaab Al-Okaidi的代码不处理此案例

答案 2 :(得分:0)

删除-WhatIf删除文件:

Get-ChildItem -Filter *.cfg -Recurse | 
Where-Object {$_.BaseName -ne $_.Directory.Name} | 
Remove-Item -WhatIf