2009-09-23 2 views
2

Мне было интересно, знал ли кто-нибудь, как удалить каталог, если в нем есть указанный файл? Например, если есть этот каталог:Удалить DIR рекурсивно, если файл соответствует? (Powershell)

PS C:\Users\mike> dir 


Directory: C:\Users\mike 


Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
-a---   9/17/2009 6:26 PM  6615 pic001.jpg 
-a---   9/19/2009 9:58 AM  7527 notes.txt 
-a---   8/31/2009 5:03 PM  10506 Project.xlsx 

Я хотел бы удалить \ микрофон, если он имеет файл JPG в нем, и любой другой каталог, который имеет файлы .jpg.. Если в каталоге нет указанного файла, его не следует удалять.

До сих пор, что у меня есть это:

get-childitem "C:\Users\mike" -include *.jpg -recurse | Where-Object { $_.mode -like 'd*' } | remove-item 

ответ

4

При использовании Get-ChildItem с * .jpg вы только собираетесь получить файлы - хорошо, если у вас есть реж с именем {что-то} .jpg. BTW Я бы использовал -фильтр и держаться подальше от параметра -include. Тар - драконы - см. Документы об этом параметре.

Это должно сделать трюк для вас:

Get-ChildItem 'C:\Users\Mike' *.jpg -r | Foreach {$_.Directory} | 
    Remove-Item -Recurse -Verbose -WhatIf 

Если печатая укоротить, что использование псевдонимов:

gci 'C:\Users\Mike' *.jpg -r | %{$_.Directory} | ri -r -v -wh 

Когда вы будете удовлетворены результатами, удалите -WhatIf, чтобы он на самом деле удалите каналы.

+0

Спасибо, это именно то, что мне нужно. Спасибо за советы. – 2009-09-24 00:20:24

+0

+1 для «Там будут драконы» :-) – Joey

+0

Я вижу, что вы полностью зависимы от трещины stackoverflow Keith! – x0n