我想使用此选项删除具有特定扩展名的文件(在我的情况下为.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>}
我如何制作最后一行?
提前致谢。问候。
答案 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