簡體   English   中英

如何悄悄刪除 PowerShell 中包含內容的目錄

[英]How to quietly remove a directory with content in PowerShell

使用 PowerShell,是否可以在不提示確認操作的情況下刪除某些包含文件的目錄?

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

PowerShell remove force 回答:help Remove-Item 說:

此 cmdlet 中的 Recurse 參數無法正常工作

解決方法的命令是

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

然后刪除文件夾本身

Remove-Item $Destination -Force 

這對我有用:

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

因此,該文件夾與其中的所有文件一起被刪除,如果文件夾路徑不存在,則不會產生錯誤。

2018 更新

在當前版本的 PowerShell(在 Windows 10 1809 上使用 v5.1 測試)中,可以使用更簡單的 Unix 語法rm -R .\\DirName以靜默方式刪除目錄.\\DirName及其可能包含的所有子目錄和文件。 事實上,許多常見的 Unix 命令在 PowerShell 中的工作方式與在 Linux 命令行中的工作方式相同。

要刪除沒有文件夾的內容,您可以使用以下命令:

Remove-Item "foldertodelete\*" -Force -Recurse

rm -Force -Recurse -Confirm:$false $directory2DeletePowerShell ISE 中不起作用,但它在常規 PowerShell CLI 中起作用。

我希望這有幫助。 它讓我吃香蕉。

簡而言之,我們可以使用rm -r -fo {folderName}遞歸刪除文件夾(刪除里面的所有文件和文件夾)並強制

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

這對我有用:

Remove-Item C:\folder_name -Force -Recurse
$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
}

由於我的目錄在 C:\\users 我必須以管理員身份運行我的 powershell,

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

這個命令對我有用。

Powershell 使用相關文件夾。 Remove-Item有幾個與 unix 一致的有用別名。 一些例子:

rm -R -Force ./directory
del -R -Force ./directory/*
$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
}

如果您將文件夾作為對象,假設您使用下一個命令在同一腳本中創建了它:

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

然后你可以在同一個腳本中像這樣刪除它

$folder.Delete($true)

$true - 遞歸刪除的狀態

如果你想連接一個變量固定的路徑和一個字符串作為動態路徑成為一個整體路徑刪除的文件夾,您可能需要下面的命令:

$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"
Remote-Item ("$fixPath" + "\Folder\SubFolder") -Recurse
Remote-Item ("$fixPath" + "\Folder\SubFolder1") -Recurse
Remote-Item ("$fixPath" + "\Folder\SubFolder2") -Recurse

一些多級目錄文件夾需要刪除兩次,困擾了我很久。 這是我的最終代碼,它對我有用,並且清理得很好,希望對您有所幫助。

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM