Como remover silenciosamente um diretório com conteúdo no PowerShell

Respostas:

340
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse
Michael Price
fonte
16
Descobri que preciso executar isso duas vezes ao executar em um diretório que contém subdiretórios. Na primeira vez, haverá muitos erros "O diretório não está vazio". Na segunda vez, ele é concluído sem erros.
Kristopher Johnson
1
Se eu quiser excluir apenas o conteúdo da pasta, mas não excluir a pasta?
Kiquenet
2
@ Kiquenet- isso funciona para mim, se eu adicionar uma barra final para o caminho, de modo que este exemplo torna-se Remove-Item \ foldertodelete * -Force -Recurse.
Adrian Carr
3
Se você deseja que ele ignore uma pasta ausente, é possível adicionar -ErrorAction Ignore, embora isso oculte outros erros.
Tor Klingberg
2
@Kiquenet Então você pode usar curingas para remover tudo dentro dessa pasta: Remove-Item './folder/*'. Se você realmente quer para limpar arquivos somente de todas as pastas que você pode listar todas as folhas e canalizá-lo para o cmdlet Remove-ItemGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl
62

No PowerShell, remova force force answer : help Remove-Item diz:

O parâmetro Recurse neste cmdlet não funciona corretamente

O comando para solução alternativa é

Get-ChildItem -Path $Destination -Recurse | Remove-Item -force -recurse

E exclua a própria pasta

Remove-Item $Destination -Force 
Michael Freidgeim
fonte
1
Se eu quiser excluir apenas o conteúdo da pasta, mas não excluir a pasta?
Kiquenet
3
@ beppe9000: Acredito que sim. Nos scripts recentes que estou usando Remove-Item -Recurse -Force $dire funciona.
Michael Freidgeim
Ok, mas eu acabei de ler que o problema ainda está aqui nas janelas 10 estendida Get-Help Remove-Itemdocumentação obtidos após Update-Helpé executado ...
beppe9000
2
Get-ChildItem também deve ter o argumento -Force, para que ele também retorne arquivos / pastas ocultos.
Vlad Iliescu
@ MichaelFreidgeim - Eu usei isso e diminuiu falhas intermitentes, mas elas ainda acontecem ocasionalmente. Se Remove-Item -recurse for problemático para o diretório de nível superior, você pode explicar por que não seria similarmente problemático quando é canalizado para a linha de solução alternativa? Get-ChildItem -recurse não retorna os filhos em uma ordem ascendente. O Remove-Item solicita sua entrada em pipeline?
AggieNick02
42

Isso funcionou para mim:

Remove-Item $folderPath -Force  -Recurse -ErrorAction SilentlyContinue

Portanto, a pasta é removida com todos os arquivos existentes e não produz erros se o caminho da pasta não existir.

necrifede
fonte
Isso não exclui a pasta.
variável
13

Atualização de 2018

Na versão atual do PowerShell (testada com a v5.1 no Windows 10 1809), pode-se usar a sintaxe Unix mais simples rm -R .\DirNamepara excluir silenciosamente o diretório .\DirNamecom todos os subdiretórios e arquivos que ele pode conter. De fato, muitos comandos comuns do Unix funcionam da mesma maneira no PowerShell e em uma linha de comando do Linux.

divenex
fonte
Você também pode usar rm -R .\DirName\*para limpar a pasta sem excluir a própria pasta
Jeff Chen
nenhum dos comandos do powershell nem este funciona para mim em um computador com núcleo de servidor de 2016. Todos dizem: "não pode ser removido porque não está vazio". Eu também tentei o comando rd no Windows. Eu posso mover a pasta para qualquer lugar, simplesmente não consigo excluir.
Helzgate 03/03
10

Para excluir conteúdo sem uma pasta, você pode usar o seguinte:

Remove-Item "foldertodelete\*" -Force -Recurse
Dmitriy N. Laykom
fonte
6

rm -Force -Recurse -Confirm:$false $directory2Deletenão funcionou no PowerShell ISE , mas funcionou através da CLI normal do PowerShell.

Eu espero que isso ajude. Isso estava me deixando bannana.

Flightdeck73
fonte
Obrigado, o mesmo vale para mim! FInicialmente, essa pasta foi excluída ao chamar PowerShell CLIe não durante o desenvolvimento PowerShell ISE.
Bruno Bieri
3

em suma, podemos usar rm -r -fo {folderName}para remover a pasta recursivamente (remover todos os arquivos e pastas dentro) e forçar

Salman
fonte
2

Abaixo está uma implementação passível de cópia da resposta de Michael Freidgeim

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
    }
}
user2426679
fonte
1

Como meu diretório estava em C: \ users, tive que executar meu powershell como administrador,

del ./[your Folder name] -Force -Recurse

esse comando funcionou para mim.

Omkar Agrawal
fonte
2
Apenas como uma nota lateral: delé um apelido para Remove-Item.
Michael Kargl 01/06/19
0
$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
}
Anderson Braz
fonte
No script acima, imprimo o nome completo da pasta e removo-o. \ o /
Anderson Braz
0

Se você possui sua pasta como objeto, digamos que você a criou no mesmo script usando o próximo comando:

$folder = New-Item -ItemType Directory -Force -Path "c:\tmp" -Name "myFolder"

Em seguida, você pode removê-lo assim no mesmo script

$folder.Delete($true)

$ true - estados para remoção recursiva

Dmitriy Reznikov
fonte
0
$LogPath = "E:\" # Your local of directories
$Folders = Get-Childitem $LogPath -dir -r | Where-Object {$_.name -like "*grav*"} # Your keyword name directories

foreach ($Folder in $Folders) 
{
    $Item =  $Folder.FullName
    Write-Output $Item
    Remove-Item $Item -Force -Recurse -ErrorAction SilentlyContinue
}
Anderson Braz
fonte
No script acima, imprimo o nome completo da pasta e removo-o. Um bom trabalho ...
Anderson Braz
1
Olá Anderson, você deve editar as respostas se não planeja adicionar 2 respostas diferentes, talvez queira excluir uma delas?
Bummi
0

Isso funcionou para mim:

Remove-Item C:\folder_name -Force -Recurse
variável
fonte