我想删除除只读文件以外的文件夹中的所有文件和子文件夹。
如何使用PowerShell做到这一点?
答案 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.FileInfo
和System.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