Насколько я понимаю вопрос, Решение Рауля Суперкоптера не совсем отвечает на него. Вместо того, чтобы находить все файлы из каталогов с именем «СТАРЫЙ», приведенное выше решение находит все файлы, содержащие в своем имени «СТАРЫЙ».
Вместо этого я думаю, что вы запрашиваете что-то, что находит все файлы старше определенной даты, которые находятся в каталогах с именем OLD.
Итак, чтобы найти каталоги, нам нужно что-то вроде следующего:
dir -r | ? {$_.name -match "\bold\b" -and $_.PSIsContainer}
Но тогда вам нужно что-то, что может рекурсивно пройти через каждый каталог и найти файлы (и, возможно, любые каталоги с именем «OLD», которые содержатся в других каталогах с именем «OLD»).
Самый простой способ сделать это - написать функцию, а затем вызвать ее рекурсивно, но вот способ сделать это на одной строке, которая использует другую тактику (обратите внимание на символ продолжения строки, так что это будет соответствовать:
dir -r | ? {!$_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date 5/1/2006)} `
| ? {(% {$_.directoryname} | split-path -leaf) -eq "OLD"}
Итак, что здесь происходит?
Первый раздел - это просто рекурсивный список каталогов. В следующем разделе проверяется, просматриваете ли вы файл (!$_.PSIsContainer
) и соответствует ли он вашим возрастным требованиям. Скобки вокруг раздела Get-Date позволяют получить результаты выполнения команды. Затем мы получаем имя каталога каждого файла и используем командлет split-path, чтобы получить только имя ближайшего каталога. Если это «СТАРЫЙ», то у нас есть файл, который соответствует вашим требованиям.