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


Respostas:


340
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse

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 

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.


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.


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

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.


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


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
    }
}

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.


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
}

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


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
}

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.