我正在尝试从用户目录中删除一些早于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分钟更旧。
答案 0 :(得分:1)
在重写脚本之前,请先分解您的要求:
$path
下找到文件夹.\*\js\*
的每个文件夹中找到项目考虑到这一点,让我们继续实施它:
$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
开关以实际删除它们