Войти

Показать полную графическую версию : удаление папок за исключением определнных


chek
26-05-2016, 08:42
всем привет. друзья, помогите со скриптом. есть следующая структура папок
Get-ChildItem d:\test\ -Recurse -Force | select fullname

FullName
--------
D:\test\1
D:\test\2
D:\test\3
D:\test\4
D:\test\2\1
D:\test\3\000
D:\test\3\1
D:\test\3\000\1
D:\test\3\000\1.bmp
D:\test\3\1\1.bmp
D:\test\4\000
задача удалить все папки за исключением 000 и вложенных в них файлов и папок. пробую
Get-ChildItem d:\test\ -Recurse -Force | ?{$_.fullname -notlike "*000*"}| ri -Recurseно тогда удаляются все папки, т.к. удаляются корневые для 000. как можно это избежать?

Kazun
26-05-2016, 09:49
$ex = @()
$folders = Get-ChildItem -Path D:\test -Recurse -Force | Where {$_.PsIsContainer} | Foreach {
if($_.FullName.Contains("000")) {
$ex += $_.FullName
}
else {
$_
}
}
$folders | ? {$temp = $_.FullName; !($ex | ? {$_.contains($temp)})} | sort {$_.fullname.split("\").count} -desc | ri -rec

greg zakharov
26-05-2016, 10:07
ls -r -for | ? {$_.PSIsContainer} | select -exp FullName | % {
$lst = New-Object "Collections.Generic.List[String]"
}{
if ($_.Contains('000')) {
[void]$lst.Remove($_.Substring(0, $_.IndexOf('0') - 1))
}
else { $lst.Add($_) }
}{ $lst | ri -r -for -ea 0 }
Kazun уже опередил.

chek
26-05-2016, 10:10
спасибо, работает.
но можно пояснить, что делает
$ex[$_.FullName] = $true
и
else {
$_
}




© OSzone.net 2001-2012