使用PowerShell,是否可以删除包含文件的目录而不提示确认操作?


当前回答

有些多级目录文件夹需要删除两次,这困扰了我很久。这是我的最终代码,它为我工作,并清理得很好,希望它有帮助。

function ForceDelete {
    [CmdletBinding()]
    param(
        [string] $path
    )
    
    rm -r -fo $path
    
    if (Test-Path -Path $path){
        Start-Sleep -Seconds 1
        Write-Host "Force delete retrying..." -ForegroundColor white -BackgroundColor red
        rm -r -fo $path
    }
}

ForceDelete('.\your-folder-name')
ForceDelete('.\your-file-name.php')

其他回答

这招对我很管用:

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

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

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

如果你想把一个固定路径的变量和一个字符串作为动态路径连接到一个完整的路径来删除文件夹,你可能需要下面的命令:

$fixPath = "C:\Users\myUserName\Desktop"
Remove-Item ("$fixPath" + "\Folder\SubFolder") -Recurse

在变量$newPath中,连接路径现在是:"C:\Users\myUserName\Desktop\Folder\SubFolder"

因此,您可以从起点(“C:\Users\myUserName\Desktop”)删除几个目录,该起点已经在变量$fixPath中定义和固定。

$fixPath = "C:\Users\myUserName\Desktop"
Remove-Item ("$fixPath" + "\Folder\SubFolder") -Recurse
Remove-Item ("$fixPath" + "\Folder\SubFolder1") -Recurse
Remove-Item ("$fixPath" + "\Folder\SubFolder2") -Recurse

简而言之,我们可以使用rm -r -fo {folderName}递归地删除文件夹(删除里面的所有文件和文件夹)并强制

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

或者,用更短的版本

rm /path -r -force