2016-10-31 3 views
0

Привет, новый для Powershell, только когда-либо заглушил существующие скрипты или работал с bash раньше.Powershell, работающий с каталогами

Я пытаюсь перечислить все каталоги с одним критерием, а затем выполнить оценку их содержимого.

В основном я хочу рекурсивно искать все dirs, называемые Обработанные, и удалять все предметы в течение 31 дня. То, что я так и для являются команды ниже:

$limit = (Get-Date).AddDays(-31) 
$path = "C:\Users\mark.hodgson\Desktop\New folder" 
$dirs = Get-ChildItem $path -Recurse -Directory| Where-Object {$_.PSIsContainer -eq $true -and $_.Name -match "Processed"} |select-object Fullname 

Когда эхо $ директорий список выглядит хорошо, как показано ниже:

PS C:\Users\mark.hodgson\Desktop\New folder> echo $dirs 

FullName               
--------               
C:\Users\mark.hodgson\Desktop\New folder\Folder1\FolderA\Processed 
C:\Users\mark.hodgson\Desktop\New folder\Folder1\FolderB\Processed 
C:\Users\mark.hodgson\Desktop\New folder\Folder2\Processed   
C:\Users\mark.hodgson\Desktop\New folder\Folder3\Processed   
C:\Users\mark.hodgson\Desktop\New folder\Folder4\Processed   
C:\Users\mark.hodgson\Desktop\New folder\Folder5\Processed 

, но когда я пытаюсь работать с деталями, как ниже, или даже просто сделать ls, он возвращает или удаляет все папки с моего рабочего стола!

$dirs | ForEach-Object { Get-ChildItem -Recurse -Force | Where-Object { !$_.PSIsContainer -eq $_.LastWriteTime -lt $limit } | Remove-Item -Force } 

же, если я использую для $ реж в $

каталоги

я должен получать основы здесь не так! Я могу жестко кодировать пути, но хотел бы сделать правильную работу.

Приветствия,

hodgm

+0

$ _ PsIsContainer -eq $ _ LastWriteTime -lt $ ограничить? Здесь ваше состояние не так. Замените -eq на - и, я думаю. –

+0

'-eq' в линии lat должен быть' -and', я бы добавил '-whatif', пока тестирование на remove-item – LotPings

+0

'! 'Должно быть' -not'; или вы можете заменить '-eq' (равно) на' -ne' (не равно). http://ss64.com/ps/syntax-compare.html – JohnLBevan

ответ

0

Вы должны ссылаться на текущий элемент трубопровода внутри ForEach-Object тела:!..

$dirs | ForEach-Object { Get-ChildItem $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $limit } | Remove-Item -Force } 
+0

Отлично, что (вместе с заменой -eq на -and из комментариев выше) отсортировал его !! – hodgm

+0

Большое значение: D – hodgm

+0

@hodgm Если мой ответ решает вашу проблему, пожалуйста, подумайте о том, чтобы это было принято, щелкнув галочку слева –

Смежные вопросы