Как удалить все файлы в папке, кроме файлов только для чтения? - PullRequest
3 голосов
/ 18 января 2012

Я хотел бы удалить все файлы и подпапки из папки, кроме файлов только для чтения.

Как это сделать с помощью powershell?

Ответы [ 3 ]

5 голосов
/ 18 января 2012

Для справки, это немного проще в V3:

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

или короткая (псевдоним) версия:

dir -at !r | ri -r -f -wh
4 голосов
/ 18 января 2012

Единственные объекты, которые могут быть доступны только для чтения, - это файлы.Когда вы используете командлет Get-ChildItem, вы получаете объекты типа 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, когда вы будете готовы к реальному удалению.

1 голос
/ 18 января 2012

Проверьте атрибут каждой папки и файла, а затем выполните условное удаление. Это просто псевдокод.

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

Итак, чтобы проверить, доступен ли файл или папка только для чтения:

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

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...