Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   удаление папок за исключением определнных (http://forum.oszone.net/showthread.php?t=315237)

chek 26-05-2016 08:42 2637712

удаление папок за исключением определнных
 
всем привет. друзья, помогите со скриптом. есть следующая структура папок
Код:

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 2637730

Код:

$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 2637732

Код:

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 2637733

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


Время: 05:37.

Время: 05:37.
© OSzone.net 2001-