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

问题描述:

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

如何使用PowerShell来实现它?

唯一的对象,可以是只读的文件。当您使用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的创建(诗前缀给它的距离),并告诉该项目是否是一个文件或文件夹。我们可以使用它仅将文件传递到Remove-Item

删除-WhatIf当您准备删除真实。

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

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

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

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

HTH

作为参考,这是在V3容易一点:

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

或短(别名)版本:

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