1

我想使用此选项删除具有特定扩展名(在我的情况下为 .cfg)且文件夹名称不同的文件。例如,如果我有一个名为 MYFOLDER 的文件夹,并且在这两个文件 MYFOLDER.cfg 和 otherfile.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>}

我怎样才能做最后一行?

提前致谢。问候。

4

3 回答 3

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 的代码都没有处理这种情况

于 2013-04-19T08:58:56.513 回答
0

Remove -WhatIf 删除文件:

Get-ChildItem -Filter *.cfg -Recurse | 
Where-Object {$_.BaseName -ne $_.Directory.Name} | 
Remove-Item -WhatIf
于 2013-04-19T09:27:51.273 回答
0

这将为您完成:

Get-ChildItem -Recurse -Include *.cfg  | % { If ( $_.Name.Split(".")[0] -ne $_.Directory.Name ) {$_.Delete()}}
于 2013-04-19T08:38:22.763 回答