我是PowerShell的新手,我创建了以下代码来删除特定的文件和文件夹:
$myFolderPath = "C:\Test"
$myLimit = (Get-Date).AddDays(-14)
# Delete files according to filter.
Get-ChildItem -Path $myFolderPath -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $myLimit} | Remove-Item -Force
# Delete empty folders.
Get-ChildItem -Path $myFolderPath -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
是否可以在执行实际的Remove-Item操作之前打印出将被删除到控制台的每个项目的完整路径?
我猜是的。必须在这里添加....... | Remove-Item -Force
在这里......
... | Remove-Item -Force -Recurse
但我无法找到如何以优雅的方式实现它(没有代码重复)。
答案 0 :(得分:0)
您可以使用
替换remove-Item
- 部件
Foreach-Object { $_.fullname; Remove-Item -Path $_.Fullname (-Recurse) -Force}
LotPings评论可能更好,如果这是你想要的。
答案 1 :(得分:0)
它没有得到很多关注,但Tee-Object
可能是这里管道的简单补充。将输出重定向到稍后可以打印的变量。
...Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $myLimit} |
Tee-Object -Variable removed | Remove-Item -Force
$removed | Write-Host
管道传输的所有文件对象都将发送到$removed
,然后发送到Remove-Item
。由于您有多个删除管道,因此您还可以使用-Append
参数,以便在需要时将所有文件保存在一个变量中。
然而,这并不意味着它们已被删除。只是他们让它通过管道。如果你真的想确定你应该使用另一个具有日志记录功能的robocopy实用程序。