Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - удаление папок за исключением определнных

Ответить
Настройки темы
PowerShell - удаление папок за исключением определнных

Аватара для chek

Ветеран


Сообщения: 508
Благодарности: 10

Профиль | Отправить PM | Цитировать


всем привет. друзья, помогите со скриптом. есть следующая структура папок
Код: Выделить весь код
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. как можно это избежать?

Отправлено: 08:42, 26-05-2016

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$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

Отправлено: 09:49, 26-05-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Код: Выделить весь код
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 уже опередил.

Отправлено: 10:07, 26-05-2016 | #3


Аватара для chek

Ветеран


Сообщения: 508
Благодарности: 10

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:10, 26-05-2016 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - удаление папок за исключением определнных

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удаление папок A.N.D.R.E.I.S.M Скриптовые языки администрирования Windows 2 21-04-2016 09:15
PowerShell - [решено] удаление пользователя со всех групп за исключением Domain Users ZEvS-master Скриптовые языки администрирования Windows 11 13-10-2014 16:43
CMD/BAT - [решено] Удаление всех разделов в ветке реестра "Interfaces" за исключением одной. intelem Скриптовые языки администрирования Windows 5 18-01-2013 20:29
CMD/BAT - Удаление папок с файлами drive_connection Скриптовые языки администрирования Windows 5 21-05-2012 07:54
Удаление перенаправленых папок Vitto Microsoft Windows NT/2000/2003 6 16-10-2009 21:51




 
Переход