Powershell v1 - 删除所有文件;文件夹以外的文件夹

时间:2010-02-12 16:50:19

标签: powershell powershell-v1.0

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

例如
C:\ TEMP
C:\ TEMP \日志
C:\ TEMP \日志\ mylog.txt
C:\ TEMP \日志\ myotherlog.log
C:\ TEMP \ filea.txt
C:\ TEMP \ fileb.txt
C:\ TEMP \ folderA ...
c:\ temp \ folderB ...

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

这应该很简单;我想12:47 amitis to getting me ...

提前致谢

RhysC

2 个答案:

答案 0 :(得分:9)

dir c:\ temp |其中{$ _。name -ne'logs'} | Remove-Item -Recurse -force

答案 1 :(得分: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)是不应删除的目录(其内容也不应该如此)。

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