Как удалить папки с помощью PowerShell Remove-Item
Удаление папок и очистка каталогов может быть времязатратной задачей, особенно когда вам нужно выполнить ту же задачу на нескольких компьютерах. С помощью PowerShell мы можем легко создать небольшой скрипт для поиска и удаления всех папок, которые вам нужны.
Преимуществом PowerShell является то, что он позволяет нам не только удалять одну папку, но и целые директории или только папки с определенным именем. Например, также возможно удалять только пустые папки.
В этой статье мы рассмотрим, как удалять папки с помощью PowerShell, и как использовать различные параметры для удаления только определённых папок.
Удалить папки с помощью PowerShell
Чтобы удалить папки с помощью PowerShell, нам нужно использовать командлет Remove-Item. Этот командлет можно использовать не только для удаления папок, но и для удаления файлов, ключей реестра и многого другого. В этой статье мы сосредоточимся на удалении папок.
Команда Remove-Item имеет несколько параметров, которые мы можем использовать для указания папки, которую мы хотим удалить:
| Параметр | Описание |
|---|---|
| -Path | Укажите путь к элементам, которые необходимо удалить. |
| -LiteralPath | Точный путь предмета |
| -Include | Указывает элемент пути для включения, например, *.txt |
| -Exclude | Указывает элемент пути для исключения, например, *.txt |
| -Recurse | Удалить элементы в указанном месте и во всех подпапках |
| -Force | Используется для удаления файлов только для чтения или скрытых элементов |
| -Confirm | Запрос на подтверждение |
| -WhatIf | Запустите команду в тестовом режиме. Ничего не удалит. |
Чтобы удалить одну папку в 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 также используется для удаления файлов, поэтому перед использованием обязательно протестируйте ваши скрипты.
Также имейте в виду, что ваши файлы удаляются навсегда, они не попадают в корзину.
Надеюсь, вы нашли эту статью полезной. Если у вас есть вопросы, просто оставьте комментарий ниже.

