如何在删除文件之前打印文件的名称/路径?

时间:2017-04-17 23:24:55

标签: powershell

我有一个Powershell脚本,它将删除至少X天的文件。我想知道在删除文件之前如何更改它以打印文件。脚本是

$limit = (Get-Date).AddDays(-45)
$path = "\\noc2-storage\IT_Backup\Daily_SQL\"                                                #"

# Delete files older than the $limit.
echo "Deleting files: "
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force


# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

3 个答案:

答案 0 :(得分:2)

最简单的方法 - 以及通常适用的方法 - 是使用-Verbose common parameter

Write-Verbose -Verbose "Deleting files:"
Get-ChildItem -Path $path -Recurse -Force | 
 Where-Object { ! $_.PSIsContainer -and $_.CreationTime -lt $limit } | 
  Remove-Item -Force -Verbose

请注意,在PSv3 +中,您可以通过-Files开关使用Get-ChildItem来简化此操作,这会直接将输出限制为仅限文件,从而可以简化Where-Object调用所谓的比较声明

Write-Verbose -Verbose "Deleting files:"
Get-ChildItem -File -Path $path -Recurse -Force | 
 Where-Object CreationTime -lt $limit | 
  Remove-Item -Force -Verbose

如果想要回显删除的内容 - 即执行干运行 - 请使用-WhatIf常用参数 Remove-Item,而不是-Verbose

另请注意,我已将echo "Deleting files: "替换为Write-Verbose -Verbose "Deleting files:"

在PowerShell中,echoWrite-Output的别名,它写入成功流,这是输出数据的意思走。

实际上,写入该流是默认操作,因此您的命令可以简化为:

"Deleting files: "    # implicitly output the string to the success stream

也就是说,状态消息如上面的属于成功流,并且使用 verbose 输出的单独流是一个选择。

Write-Verbose -Verbose显式生成这样的详细输出,但通常的机制是让函数/ cmdlet的-Verbose公共参数或$VerbosePreference首选项变量驱动是否应该详细输出是否显示。

答案 1 :(得分:0)

为此 - 你可以很容易地修改你已经拥有的命令。

$limit = (Get-Date).AddDays(-45)
$path = "\\noc2-storage\IT_Backup\Daily_SQL\"

# Delete files older than the $limit.
$files = Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit }
ForEach ($file in $files) {
  Write-Verbose -Verbose "Deleting: $file"
  Remove-Item -force $file
}


# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

答案 2 :(得分:0)

假设您要打印文件名而不想打印文件内容: 您是否尝试将-verbose传递给Remove-Item