【问题标题】:Deleting certain files in powershell script删除PowerShell脚本中的某些文件
【发布时间】:2023-03-23 09:00:01
【问题描述】:

我有一个 powershell 脚本,它遍历一个目录并删除超过 18 个月的文件。大多数文件遵循以下命名约定:

20140628

但是,有些文件没有。我试图让脚本忽略这些文件,只删除遵循命名约定的文件。但是,出于某种原因,下面的脚本正在执行与此完全相反的操作,并删除不遵循命名约定的文件并留下那些遵循的文件。我将如何修改脚本以满足我的需要?任何帮助将不胜感激。

$targetdirectory = "\\DPR320-W12-1600\PRTG"
$CleanupList = Get-ChildItem $targetdirectory\test
$Threshold = (get-date).AddMonths(-18)
$culture = [Globalization.CultureInfo]::InvariantCulture

foreach ($DirName in $CleanupList)
{
try {
  [datetime]::ParseExact($DirName.BaseName, 'yyyyMMdd', $culture)
  Remove-Item $DirName.FullName -Force -Recurse
} 

catch {

  continue
}

}

【问题讨论】:

  • “清理”过程在哪里?

标签: windows shell powershell foreach try-catch


【解决方案1】:
$targetDirectory = "\\DPR320-W12-1600\PRTG"
$cleanupList = Get-ChildItem $(Join-Path $targetdirectory "test")
$threshold = (Get-Date).AddMonths(-18)
$culture = [Globalization.CultureInfo]::InvariantCulture

foreach ($dirName in $cleanupList) {
    try {
        $dateFromName = [datetime]::ParseExact($dirName.BaseName, "yyyyMMdd", $culture)

        if($dateFromName -le $threshold) {
            Remove-Item $dirName.FullName -Force -Recurse
        }
    } catch {
        Continue
    }
}

如果解析为日期失败,将抛出错误并且文件不会被删除。

我什至不确定这里是否需要 Continue,但您不能删除 catch 块。

【讨论】:

  • 谢谢!请参阅我编辑的脚本。我一开始发错了。它现在有删除线。但是,它会删除所有带有日期的文件。我如何让它只删除超过 18 个月的文件?
  • 比较应该使用什么日期?从名称中解析出来的那个?文件修改?文件创建?
  • 是的。它应该接受文件/目录名称并将其与脚本顶部的变量之一中设置的今天日期进行比较。
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 2013-10-04
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多