如何在PowerShell中静默删除包含内容的目录


Answers:


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

16
我发现在包含子目录的目录上运行时,我需要运行两次。第一次,将出现很多“目录不为空”错误。第二次完成,没有错误。
克里斯托弗·约翰逊

1
如果只删除文件夹内容而不删除文件夹?
Kiquenet

2
@ Kiquenet-这对我有用,如果我在路径上添加斜杠,那么此示例将成为Remove-Item。\ foldertodelete * -Force -Recurse
Adrian Carr

3
如果希望它忽略丢失的文件夹,则可以添加-ErrorAction Ignore,尽管这也会隐藏其他错误。
Tor Klingberg

2
@Kiquenet然后,您可以使用通配符删除该文件夹中的所有内容:Remove-Item './folder/*'。如果您只想清除所有文件夹中的文件,则可以列出所有叶子并将其通过管道传递到Remove-Item cmdletGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl

62

PowerShell删除强制答案:帮助Remove-Item说:

此cmdlet中的Recurse参数无法正常工作

解决方法是

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

然后删除文件夹本身

Remove-Item $Destination -Force 

1
如果只删除文件夹内容而不删除文件夹?
Kiquenet

3
@ beppe9000:我相信,是的。在最近使用的脚本中Remove-Item -Recurse -Force $dir,它可以正常工作。
Michael Freidgeim

好的,但是我只是读到,问题仍然在运行Get-Help Remove-Item后获得的Windows 10扩展文档上Update-Help...
beppe9000 '16

2
Get-ChildItem还应该具有-Force参数,以便它还返回隐藏的文件/文件夹。
弗拉德·伊利埃斯库

@MichaelFreidgeim-我已经使用了它,它减少了间歇性故障,但是仍然偶尔发生。如果Remove-Item -recurse对于顶级目录有问题,您能否解释一下为什么将它与解决方法一起输入管道时也不会出现同样的问题?Get-ChildItem -recurse不会按自下而上的顺序返回子级。Remove-Item是否订购其管道输入?
aggieNick02 '18

42

这为我工作:

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

因此,文件夹被删除,其中所有文件都在其中,如果文件夹路径不存在,则不会产生错误。


这不会删除文件夹。
变量

13

2018更新

在当前版本的PowerShell(在Windows 10 1809上使用v5.1进行测试)中,可以使用更简单的Unix语法rm -R .\DirName来静默删除目录.\DirName及其可能包含的所有子目录和文件。实际上,许多常见的Unix命令在PowerShell中的工作方式与Linux命令行中的工作方式相同。


您还可以使用rm -R .\DirName\*清理文件夹而不删除文件夹本身
Jeff Chen,

Powershell命令和本命令都不适用于2016服务器核心计算机。他们都说,“由于不为空而无法删除”。我也在Windows中尝试了rd命令。我可以将文件夹移动到任何地方,但是无法删除。
赫尔兹盖特


6

rm -Force -Recurse -Confirm:$false $directory2DeletePowerShell ISE中不起作用,但通过常规PowerShell CLI起作用。

我希望这有帮助。它把我赶快运了。


谢谢,我也一样!最后,从中调用PowerShell CLI而不是在中进行开发时,此文件夹已被删除PowerShell ISE
布鲁诺·比耶里

3

简而言之,我们可以使用rm -r -fo {folderName}递归方式删除文件夹(删除其中的所有文件和文件夹)并强制执行


2

以下是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
    }
}


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
}

在上面的脚本中,我打印文件夹的全名并将其删除。\ o /
安德森·布拉兹

0

如果您将文件夹作为对象,假设您使用下一个命令在同一脚本中创建了该文件夹:

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

然后您可以在同一脚本中像这样删除它

$folder.Delete($true)

$ true-递归删除的状态


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

1
嗨,安德森,如果您不打算添加2个不同的答案,则应该编辑答案,也许您想删除其中一个?
bummi

0

这为我工作:

Remove-Item C:\folder_name -Force -Recurse
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.