2015-11-10 3 views
0

Я искал повсюду, но ничего, кажется, делать именно то, что мне нужно ..Powershell: Рекурсивный удалить, но исключить непустые папки с определенным именем

У меня есть структура папок, как это:

  • C: \ Test \ Job1 \ вложения \
  • C: \ Test \ Job2 \ вложения \
  • C: \ Test \ Job3 \ вложения \

I 'd хотел бы удалить все файлы и папки в C: \ Test (но не сам C: \ Test) , если их папки вложений пусты. Непустые вложенные каталоги должны быть оставлены в покое. Все остальные файлы и папки должны быть удалены.

Итак, если единственным файлом в указанных выше путях был C: \ Test \ Job2 \ attachments \ test.txt, единственными папками, оставленными после моего скрипта, были C: \ Test \ Job2 \ attachments. Каталоги Job1 и Job3 будут удалены.

  1. Чтобы получить мяч прокатки, я попытался это для того, чтобы удалить все, кроме папки вложений:

    $TargetFolder = "C:\Test\*" get-childitem $TargetFolder -exclude attachments* -recurse | remove-item -WhatIf

... но, кажется, полностью игнорировать -exclude flag

  1. Это работает, но это дает мне подсказки, что мне нужно будет сказать «нет» для него работа право:

    Get-ChildItem -Path $TargetFolder -Recurse | Select -ExpandProperty FullName | Where {$_ -notlike $TargetFolder + "*\attachments\*.*"} | sort length -Descending | Remove-Item -Force

... это было бы здорово, если бы было что-то противоположное -Force

ответ

0

Если вам просто нужно выбрать «Нет» для вас, Вы пытались использовать с флагом Remove-Item -Confirm:$False? Также попробуйте Remove-Item -Force -Recurse и посмотрите, поможет ли это.

0

Вы не можете устранить неисправности трубопроводов.

Попробуйте это и перейдите в трубопровод, если хотите.

$TargetFolder = "C:\Test\*" 

$FoldersInTargetFolder = Get-ChildItem -Path $TargetFolder | Where {$_.psIsContainer -eq $true} 

ForEach ($folder in $FoldersInTargetFolder) { 
    [STRING]$AttachmentsFolder = "$($folder.FullName)\attachments" 
    $AttachF = Get-item $AttachmentsFolder 

    If ($AttachF.EnumerateFileSystemInfos() | select -First 1) { 
     #Found files and/or Folder in \attachments\ 
     Remove-Item -Path $folder.FullName -Force 
    } 
} 
Смежные вопросы