Можно ли с помощью PowerShell удалить какой-либо каталог, содержащий файлы, без запроса подтверждения действия?
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse
Из PowerShell удалить принудительный ответ : help Remove-Item говорит:
Параметр Recurse в этом командлете не работает должным образом
команда для обхода:
Get-ChildItem -Path $Destination -Recurse | Remove-Item -force -recurse
А затем удалите саму папку
Remove-Item $Destination -Force
Это сработало для меня:
Remove-Item $folderPath -Force -Recurse -ErrorAction SilentlyContinue
Таким образом, папка удаляется со всеми находящимися там файлами и не выдает ошибку, если путь к папке не существует.
Для удаления содержимого без папки вы можете использовать следующее:
Remove-Item "foldertodelete\*" -Force -Recurse
2018 Обновление
В текущей версии PowerShell (протестировано с v5.1 в Windows 10 1809) можно использовать более простой синтаксис Unix rm -R .\DirName для автоматического удаления каталога .\DirName со всеми подкаталогами и файлами, которые он может содержать. На самом деле многие обычные команды Unix работают в PowerShell так же, как и в командной строке Linux.
rm -R .\DirName
.\DirName
rm -Force -Recurse -Confirm:$false $directory2Delete не работал в PowerShell ISE , но работал через обычный интерфейс командной строки PowerShell.
rm -Force -Recurse -Confirm:$false $directory2Delete
Надеюсь, это поможет. Это сводило меня с ума.
Ниже приведена копируемая реализация ответа Михаила Фрейдгейма
function Delete-FolderAndContents { # http://stackoverflow.com/a/9012108 param( [Parameter(Mandatory=$true, Position=1)] [string] $folder_path ) process { $child_items = ([array] (Get-ChildItem -Path $folder_path -Recurse -Force)) if ($child_items) { $null = $child_items | Remove-Item -Force -Recurse } $null = Remove-Item $folder_path -Force } }
Поскольку мой каталог находился в C: \ users, я должен был запустить мой powershell от имени администратора,
del ./[your Folder name] -Force -Recurse
эта команда работала для меня.
$LogPath = "E:\" # Your local of directories $Folders = Get-Childitem $LogPath -dir -r | Where-Object {$_.name -like "<em>grav</em>"} # Your keyword name directories</p> <p>foreach ($Folder in $Folders) { $Item = $Folder.FullName Write-Output $Item Remove-Item $Item -Force -Recurse -ErrorAction SilentlyContinue }
$LogPath = "E:\" # Your local of directories $Folders = Get-Childitem $LogPath -dir -r | Where-Object {$_.name -like "*temp*"} foreach ($Folder in $Folders) { $Item = $Folder.FullName Write-Output $Item Remove-Item $Item -Force -Recurse }