Powershell v1 - 删除指定文件夹以外的所有文件和文件夹

Powershell v1 - 删除指定文件夹以外的所有文件和文件夹

问题描述:

我想删除给定根文件夹的所有内容和子项,但是我想保留一些文件(日志),这些文件都存放在日志中文件夹 在PowerShell中这样做的优雅方式是什么? 目前,我在multile步骤做,这肯定可以轻松完成......我有一种感觉我的OO岬/语言偏置的方式获得Powershell v1 - 删除指定文件夹以外的所有文件和文件夹


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 \日志\ myotherlog.log

这应该很简单;我想12点47个am-itis是让我...提前

RhysC

+0

我的解决方案有问题吗?要求,因为你没有评论它,也没有接受;) – stej 2010-02-13 09:30:49

DIR C:\ temp目录|其中{$ _。name -ne'logs'} | Remove-Item -Recurse -force

+0

干净,它的工作原理。你,我的朋友,是一个好人。 – RhysC 2010-02-14 13:56:47

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

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 

它的工作原理recursivelly。 CleanDir的第一个参数是起始目录。第二个($skipDir)是不应删除的目录(并且其内容不应该如此)。

被修改:校正混淆示例;)

+0

感谢Stej,这也是可行的。感谢它的一个很好的通用功能 – RhysC 2010-02-14 14:01:49