Foreach删除早于分钟/天的文件/目录

时间:2019-05-13 10:28:26

标签: powershell loops

我正在尝试从用户目录中删除一些早于X天的文件,因此我正在使用Loop遍历所有主驱动器,并定位了一个文件夹,该文件夹需要删除早于其的子文件和子目录指定的日期。在我的脚本中,我正在使用(Get-Date).AddMinutes(-5),因此可以对其进行测试,然后将其更改为(Get-Date).AddDays(-60)

我已经编译了脚本,该脚本执行的结果不是我想要的,因此看起来好像我输入了错误的代码,等等。。。我到处都检查过但找不到解决方案希望如此。

$mins = (Get-Date).AddMinutes(-5)
$path = "D:\Chrome\User Data" 

foreach ($i in $path) {
    Get-ChildItem -Path $i -Recurse |
    Where-Object { $_.CreationTime -lt $mins } | 
    $i = $_.FullName + "\*\js" + "\*" 
    Remove-Item $path -Recurse -WhatIf
}

我认为我不了解循环过程,似乎要遍历所有特定目录,然后删除5分钟之前的文件。任何帮助将不胜感激。

    $mins = (Get-Date).AddMinutes(-5)
$path = "D:\Chrome\User Data" 


Get-ChildItem -Path $path -Recurse | Where-Object {$_.CreationTime -lt $mins} |ForEach-Object {
     $path = $_.FullName + "\*\js" + "\*" 
    Remove-Item $path -Recurse -WhatIf
    }

我已经修改了要执行的脚本,但仍然无法使文件比5分钟更旧。

1 个答案:

答案 0 :(得分:1)

在重写脚本之前,请先分解您的要求:

  1. $path下找到文件夹
  2. .\*\js\*的每个文件夹中找到项目
  3. 如果创建超过60天,则删除

考虑到这一点,让我们继续实施它:

$threshold = (Get-Date).AddMinutes(-5)
$path = "D:\Chrome\User Data" 

# Loop over each directory in $path
foreach ($folder in Get-ChildItem -LiteralPath $path -Directory) {
  # Construct sub-folder path
  $subPath = Join-Path $folder.FullName "*\js\*"

  # Locate the files at *\js\*
  $files = Get-ChildItem $subPath -Recurse

  # Filter on Creation date
  $files = $files |Where-Object { $_.CreationTime -lt $threshold }

  # Remove files
  $files |Remove-Item -WhatIf
}

试运行将告诉您将要删除的内容,最后拔出-WhatIf开关以实际删除它们