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

Powershell Foreach删除早于分钟/天的文件/目录,powershell,loops,Powershell,Loops,我正在尝试从用户目录中删除一些早于X天的文件,因此我使用循环遍历所有主驱动器,并针对一个我需要删除早于指定天的子文件和子目录的文件夹。在我的脚本中,我使用了(Get Date).AddMinutes(-5),这样我就可以测试它了,然后我将它改为(Get Date).AddDays(-60) 我已经编写了脚本,它做什么,它应该是结果不是我所希望的,所以它看起来像我有错误的代码等。。。我到处查看,但找不到我希望的解决方案 $mins = (Get-Date).AddMinutes(-5) $path

我正在尝试从用户目录中删除一些早于X天的文件,因此我使用循环遍历所有主驱动器,并针对一个我需要删除早于指定天的子文件和子目录的文件夹。在我的脚本中,我使用了
(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分钟旧的文件

在重写脚本之前,让我们先分析一下您的需求:

  • $path
  • \*\js\*
  • 如果在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
    开关以实际删除它们

    您的
    $path
    值是一个目录。因此,当您使用语法
    foreach($i in$path)
    时,它只迭代一个值,该值在每个循环迭代开始时分配给
    $i
    。在这种情况下,
    $path
    通常是一个集合。如果您已经知道需要从中删除的文件夹,则无需循环该文件夹。听起来您需要在所有主驱动器中循环,然后在构建路径上使用
    Get ChildItem
    :\path
    。请阅读并以更清晰的方式告诉我们结果是什么,以及您希望它是什么。您发布的脚本无法工作。它应该会抛出一个错误。很抱歉问错了问题@感谢您的帮助,现在它按预期显示了输出,但我仍然没有得到我应该得到的结果$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”+“*”删除项$path-Recurse-WhatIf``我似乎无法将其作为脚本代码添加。感谢您的帮助。这很有道理,谢谢你详细解释。我已经运行了脚本,由于一些奇怪的原因,它没有选择$path变量中指定的正确路径。它正在获取我当前登录用户的路径。Get ChildItem:找不到路径“C:\Users\pshell\rcrown”,因为它不存在。这太好了。这似乎是预期的工作!