Поиск по сайту:

Как удалить папки с помощью PowerShell Remove-Item


Удаление папок и очистка каталогов может быть времязатратной задачей, особенно когда вам нужно выполнить ту же задачу на нескольких компьютерах. С помощью PowerShell мы можем легко создать небольшой скрипт для поиска и удаления всех папок, которые вам нужны.

Преимуществом PowerShell является то, что он позволяет нам не только удалять одну папку, но и целые директории или только папки с определенным именем. Например, также возможно удалять только пустые папки.

В этой статье мы рассмотрим, как удалять папки с помощью PowerShell, и как использовать различные параметры для удаления только определённых папок.

Удалить папки с помощью PowerShell

Чтобы удалить папки с помощью PowerShell, нам нужно использовать командлет Remove-Item. Этот командлет можно использовать не только для удаления папок, но и для удаления файлов, ключей реестра и многого другого. В этой статье мы сосредоточимся на удалении папок.

Команда Remove-Item имеет несколько параметров, которые мы можем использовать для указания папки, которую мы хотим удалить:

ПараметрОписание
-PathУкажите путь к элементам, которые необходимо удалить.
-LiteralPathТочный путь предмета
-IncludeУказывает элемент пути для включения, например, *.txt
-ExcludeУказывает элемент пути для исключения, например, *.txt
-RecurseУдалить элементы в указанном месте и во всех подпапках
-ForceИспользуется для удаления файлов только для чтения или скрытых элементов
-ConfirmЗапрос на подтверждение
-WhatIfЗапустите команду в тестовом режиме. Ничего не удалит.
Параметры cmdlet Remove-Item

Чтобы удалить одну папку в PowerShell, нам нужно указать полный путь к папке. Полезно знать, что эта команда удалит папку со всеми ее содержимым, даже если вы не указали параметр -recurse. Однако вы получите предупреждение, если не использовали параметр -recurse, и папка содержит содержимое.

Поэтому важно проверить, есть ли у вас правильная папка, прежде чем вы её фактически удалите. Вот почему я рекомендую сначала выполнить команду с параметром -WhatIf, чтобы проверить результат:

Remove the folder D:\testfiles\folder in test mode
Remove-Item -Path "D:\testfiles\folder" -WhatIf

В приведенном ниже примере папка не была пустой. Поэтому нам нужно будет подтвердить, что мы хотим удалить папку и её содержимое.

Последняя строка, Что Если, показывает, какая операция выполняется на целевом пути:

Вместо -WhatIf мы также можем принудительно вызвать подтверждение действия. Таким образом, вы все равно можете дважды проверить, удаляете ли вы правильную папку, и подтвердить действие перед его удалением.

Remove-Item -Path "D:\testfiles\empty folder" -Confirm

Result:
Confirm
Are you sure you want to perform this action?
Performing the operation "Remove Directory" on target "D:\testfiles\empty folder".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Удалить папку и содержимое

Когда вы хотите удалить папку и все ее содержимое с помощью PowerShell, вам необходимо использовать параметр -Recurse. Таким образом, все подпапки и файлы в данной директории будут удалены. Параметр не выдаст предупреждение, он просто удалит все содержимое.

Команда ниже удалит «Папку А» и её содержимое:

Delete folder A and all contents
Remove-Item -Path "D:\testfiles\folder A" -Recurse

Если вы хотите удалить только все содержимое, которое находится внутри «папки A», тогда мы должны использовать подстановочный знак внутри параметра -path:

Delete all subfolders and content inside Folder A
Remove-Item -Path "D:\testfiles\folder A\*" -Recurse

Принудительное удаление папки

Когда вы пытаетесь удалить папку, содержащую элементы только для чтения или элементы, которые в данный момент используются, вы получите сообщение об ошибке о том, что у вас недостаточно прав доступа для выполнения этой операции.

Чтобы удалить папку, которая содержит элемент только для чтения, скрытые файлы или файлы, которые в данный момент используются, вы можете использовать параметр -Force:

Remove-Item -Path "D:\testfiles\folder B" -Force

or in short:
rm -r -force "D:\testfiles\folder"

Удалить несколько папок

Чтобы удалить несколько папок одной командой, мы можем либо указать несколько путей, либо использовать один из вариантов фильтрации. Я объясню фильтры позже в этой статье. Вы можете указать несколько папок для удаления, используя строку с разделением запятыми:

Remove-Item -Path "D:\testfiles\folder d", "D:\testfiles\folder e" -Recurse

Другой вариант - создать массив со всеми путями и пройтись по ним с помощью оператора foreach.

Удалить папку, если она существует

При использовании командлета Remove-Item в скриптах хорошей идеей является проверка существования папки перед ее удалением. Мы можем сделать это, используя командлет Test-Path. Это проверит, существует ли папка, и вернет true или false в зависимости от результата. Используя это внутри оператора if, мы можем удостовериться, что папка будет удалена только в том случае, если она существует:

$folder = "D:\testfiles\folder B"

if (Test-Path -Path $folder ) {
    Remove-Item -Path $folder
}

Использование фильтров для удаления папок в PowerShell

Теперь мы рассмотрели основные принципы удаления папки с помощью PowerShell. Но помимо удаления папки из определенного пути, вы часто сталкиваетесь с ситуациями, когда необходимо удалить все папки, которые старше x дней или содержат конкретное слово в названии папки.

Существует несколько методов для выбора только тех папок, которые нам нужно удалить в PowerShell. Но при использовании всех методов убедитесь, что вы сначала протестировали выбор, прежде чем фактически удалить папки.

Использование фильтра включения

Фильтр -include позволяет указать часть строки, которую должен содержать файл или папка, которые вы хотите удалить. Он работает в сочетании с символом подстановки в пути.

Важно отметить, что удаляются как файлы, так и папки, содержащие данное имя. Например, чтобы удалить все папки (а соответственно и файлы), в которых есть слово 'test':

Remove-Item -Path "D:\testfiles\folder c\*" -Include "*test*"

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

Используя фильтр исключения

С помощью фильтра -exclude мы можем удалить все содержимое в конкретной папке, за исключением папок, название которых содержит указанное слово. Снова, фильтр работает как с файлами, так и с папками, так что все файлы, соответствующие фильтру, также не будут удалены.

Например, чтобы удалить все файлы и папки из указанного пути, кроме содержимого в папке «la-test-folder», мы можем сделать следующее:

Remove-Item -Path "D:\testfiles\folder c\*" -Exclude "la-test-folder"

Так же, как и с фильтром включения, вы можете использовать подстановочный знак в строке исключения или конкретные несколько строк (имена папок) для сопоставления.

Удалить папки старше чем

Довольно распространенная ситуация заключается в том, чтобы удалить все папки, возраст которых превышает x дней. Для этого нам сначала нужно рассчитать дату папки. Скажем, мы хотим удалить все папки, возраст которых превышает 30 дней. Первый шаг — получить дату 30 дней назад:

Get the date from today minus 30 days
$dateTime = (Get-Date).AddDays(-30)

Следующий шаг - получить все папки в заданном пути, которые старше указанной даты. Мы можем сделать это, сравнив lastwritetime папки с datetime, который мы рассчитали:

Get-ChildItem -Path $Path -Recurse -Directory | Where-Object { $_.LastWriteTime -lt $dateTime }

Теперь нам нужно просто подключить командлет Remove-Item для фактического удаления папки и ее содержимого. Снова сначала протестируйте результаты с параметром -WhatIf, прежде чем на самом деле удалить папки.

$dateTime = (Get-Date).AddDays(-30)
$path = "d:\testfiles\"

Get-ChildItem -Path $Path -Recurse -Directory | Where-Object { $_.LastWriteTime -lt $dateTime } | Remove-Item -Recurse -WhatIf

Удалить пустые папки

Чтобы удалить только пустые папки с помощью PowerShell, вам нужно будет создать небольшой скрипт. Скрипт должен проверять каждую подпапку в заданной папке, содержит ли она элементы или нет. Когда папка не содержит никаких элементов, только тогда её можно удалить.

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

Заключение

PowerShell - это отличный инструмент, когда вам нужно удалить несколько папок или автоматически очистить определенный каталог. Имейте в виду, что командлет Remove-Item также используется для удаления файлов, поэтому перед использованием обязательно протестируйте ваши скрипты.

Также имейте в виду, что ваши файлы удаляются навсегда, они не попадают в корзину.

Надеюсь, вы нашли эту статью полезной. Если у вас есть вопросы, просто оставьте комментарий ниже.