如何删除除只读文件以外的文件夹中的所有文件?

时间:2012-01-18 11:37:36

标签: powershell powershell-v2.0

我想删除除只读文件以外的文件夹中的所有文件和子文件夹。

如何使用PowerShell做到这一点?

3 个答案:

答案 0 :(得分:5)

作为参考,这在V3中更容易一些:

Get-ChildItem -Attributes !r | Remove-Item -Recurse -Force -WhatIf

或短(别名)版本:

dir -at !r | ri -r -f -wh

答案 1 :(得分:4)

唯一可以只读的对象是文件。使用Get-ChildItem cmdlet时,您将获得System.IO.FileInfoSystem.IO.DirectoryInfo类型的对象。 FileInfos有一个名为IsReadOnly的属性。所以你可以做一个班轮:

dir -recurse -path C:\Somewhere | ? {-not $_.IsReadOnly -and -not $_.PsIsContainer} | Remove-Item -Force -WhatIf

PsIsContainer属性由PowerShell创建(Ps前缀将其赋予),并告知该项是文件还是文件夹。我们可以使用它将文件仅传递给Remove-Item

当您准备删除真实内容时删除-WhatIf

答案 2 :(得分:1)

检查每个文件夹和文件的属性,然后执行基于条件的删除。这只是伪代码。

If (-not (a readonly file)) {
delete file
}

因此,要检查给定的文件或文件夹是否只读:

$item = Get-Item C:\Scripts\Test.txt
$item.IsReadOnly

HTH