2

我想删除给定根文件夹的所有内容和子文件夹,但是我想保留一些文件(日志),它们都驻留在日志文件夹中。在 powershell 中执行此操作的优雅方法是什么。目前我正在分多个步骤进行操作,当然这可以轻松完成……我感觉我的 oo-ness/语言偏见正在妨碍我

例如
c:\temp
c:\temp\logs
c:\temp\logs\mylog.txt
c:\temp\logs\myotherlog.log
c:\temp\filea.txt
c:\temp\fileb.txt
c:\临时\文件夹A...
c:\临时\文件夹B...

删除后应该只是
c:\temp
c:\temp\logs
c:\temp\logs\mylog.txt
c:\temp\logs\myotherlog.log

这应该很简单;我想 12:47am-itis 让我...

提前致谢

RhysC

4

2 回答 2

9

目录 c:\temp | 其中 {$_.name -ne 'logs'}| 删除项目-递归-强制

于 2010-02-13T19:07:47.350 回答
2

这是一个通用的解决方案:

function CleanDir($dir, $skipDir) {
    write-host start $dir
    Get-ChildItem $dir | 
        ? { $_.PsIsContainer -and $_.FullName -ne $skipDir } | 
        % { CleanDir $_.FullName $skipDir } |
        ? { $skipDir.IndexOf($_, [System.StringComparison]::OrdinalIgnoreCase) -lt 0 } |
        % { Remove-Item -Path $_ }
    Get-ChildItem $dir |
        ? { !$_.PsIsContainer } |
        Remove-Item
    $dir
}

CleanDir -dir c:\temp\delete -skip C:\temp\delete\logs

它以递归方式工作。第一个参数CleanDir是起始目录。第二个 ( $skipDir) 是不应删除的目录(其内容也不应删​​除)。

编辑:更正了令人困惑的示例;)

于 2010-02-12T17:57:10.193 回答