удаление папок за исключением определнных
всем привет. друзья, помогите со скриптом. есть следующая структура папок
Код:
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. как можно это избежать?
|
Код:
$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 уже опередил.
|
спасибо, работает.
но можно пояснить, что делает
$ex[$_.FullName] = $true
и
else {
$_
}
|
Время: 05:37.
© OSzone.net 2001-