Powershell与目录合作

时间:2016-10-31 10:42:16

标签: powershell

新手Powershell只是曾经屠杀现有的脚本或之前使用过bash。

我试图用一个标准列出所有目录,然后对其内容执行推荐。

基本上我想递归搜索所有名为Processed的目录,并在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

当我回复$ dirs时,列表看起来很好,如下所示:

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 }

如果我在$ dirs中使用$ dir

我必须在这里弄错基础!我可以对路径进行硬编码,但我很乐意做好工作。

干杯,

hodgm

1 个答案:

答案 0 :(得分:0)

您需要引用ForEach-Object正文中的当前管道项:

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