【问题标题】:Powershell - delete old folders but not old filesPowershell - 删除旧文件夹但不删除旧文件
【发布时间】:2016-03-11 09:31:04
【问题描述】:

我有以下代码可以保留在我不想再保留的旧文件夹之上

     Get-ChildItem -Path $path -Recurse -Force -EA SilentlyContinue| 
      Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } |
       Remove-Item -Force -EA SilentlyContinue
     Get-ChildItem -Path $path -Recurse -Force -EA SilentlyContinue| 
      Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path 
       $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) 
       -eq $null } | Remove-Item -Force -Recurse -EA SilentlyContinue

它会删除超过一定天数($limit) 的所有内容,包括文件和文件夹。 但是,我所追求的只是删除旧文件夹及其内容。

例如,一天前的文件夹可能包含一年前的文件,但我想保留该文件夹和旧文件。上面的代码保留文件夹但删除文件。我要做的就是删除根目录中早于 $limit 的文件夹(及其内容),否则不理会其他文件夹和内容。

提前致谢。

【问题讨论】:

    标签: powershell backup


    【解决方案1】:

    看看这个吧:

     Get-ChildItem -Path $path -Recurse -Force -EA SilentlyContinue| 
      Where-Object { !$_.PSIsContainer -and $_.CreationTime -ge $limit } |
       Remove-Item -Force -EA SilentlyContinue
    

    它基本上是在说“所有不是文件夹并且比指定更早的东西都被删除”。所以你的第一步是删除它。

    第二部分只是删除空文件夹,您可以保持原样,也可以添加到 Where 语句以包含 CreationTime:

     Get-ChildItem -Path $path -Recurse -Force -EA SilentlyContinue| 
      Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $limit -and (Get-ChildItem -Path 
       $_.FullName -Recurse -Force | Where-Object { $_.CreationTime -lt $limit }) 
       -eq $null } | Remove-Item -Force -Recurse -EA SilentlyContinue
    

    第二个 Where 语句返回一个比 $limit 新的文件和文件夹列表,并且只有当它为空时才删除该文件夹。

    【讨论】:

    • 请原谅我的无知,我不是程序员!所以我删除了第一行,它不再删除文件了。但是,第二行不会删除旧文件夹,因为它们不是空的。我需要的是如何删除非空的旧文件夹。
    • 嗯...您打算如何删除文件夹而不是其中的文件?
    • OH 等等,只有当文件夹及其内容超过限制时,您才想删除文件夹。好的,请稍等。
    • 是的,抱歉,可能不清楚。想要删除旧文件夹及其内容。即使内容很旧,新文件夹也不会受到影响。
    • 好的,将 !$_.PSIsContainer 更改为 $_.CreationTime -ge $limit - 答案中的完整细节
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2017-01-06
    相关资源
    最近更新 更多