将要删除的文件夹名称和子文件夹名称写入输出文件

Write folder name and subfolder name being deleted to output file

我写了下面的内容,目的是删除目录中创建日期为 2 天或更长时间的所有文件夹,无论是否成功,都将其记录在输出文件中。

除了文件名不会显示在输出文件中外,脚本按我希望的方式运行。显示的全部是'Deletion of Failed/Successful'

$dump_path = "C:\desktop"
$max_days = "-2"
$curr_date = Get-Date
$del_date = $curr_date.AddDays($max_days)

ForEach-Object {
  $filename = $_
  Get-ChildItem $statfolder$_ -Recurse | Where-Object {
    $_.CreationTime -lt $del_date
  } | Remove-Item -Recurse -Force

  if ($? -eq $false) {
    echo "$Deletion of $filename Failed" |
      Out-File -Append C:\Logs\DELETION_FAIL_K_$(Get-Date -Format `"dd-MMM-yyyy`").txt
  } else {
    Write-Output "Deletion of $filename Successful" |
      Out-File -Append C:\Logs\DELETION_SUCCESS_K_$(Get-Date -format `"dd-MMM-yyyy`").txt
  }
}

理想情况下,我希望日志仅显示父文件夹名称和下一级子文件夹列表。这可能吗?

例如。日志将显示

Deletion of folder 12-Jan-2017 containing sub folders R2015, R2086 was Successful

如果无法添加下一级的子文件夹,那么下面的就好了:

Deletion of folder 12-Jan-2017 was Successful

您使用 ForEach-Object 的方式永远不会填充当前对象变量 $_(以及相应的变量 $filename)。您希望价值从何而来?

Get-ChildItem | Where-Object 的输出输入 ForEach-Object,但首先按全名对结果进行排序,以便嵌套文件夹在其父文件夹之前被删除。

Get-ChildItem $statfolder$_ -Recurse | Where-Object {
  $_.PSIsContainer -and
  $_.CreationTime -lt $del_date
} | Sort-Object FullName | ForEach-Object {
  $folder = $_.FullName
  "Deleting folder '$folder'."
  Remove-Item $folder -Recurse -Force -WhatIf
}

使用 -WhatIf 开关,您将执行 dry-run,只是回显要删除的内容,而不实际删除它。在您确认一切都会按预期工作后,删除开关和 re-run.