PowerShellでコンテンツを含むディレクトリを静かに削除する方法


回答:


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

16
サブディレクトリを含むディレクトリで実行すると、これを2回実行する必要があることがわかりました。初めて、多くの「ディレクトリが空ではありません」エラーが発生します。2回目は、エラーなしで完了します。
クリストファージョンソン

1
フォルダーのコンテンツのみを削除し、フォルダーは削除しない場合
Kiquenet

2
@ Kiquenet-パスに末尾のスラッシュを追加すると、これが機能します。したがって、この例は、Remove-Item。\ foldertodelete * -Force -Recurse
Adrian Carr

3
不足しているフォルダを無視する場合は、を追加できますが-ErrorAction Ignore、他のエラーも非表示になります。
Tor Klingberg、2016年

2
@Kiquenet次に、ワイルドカードを使用して、そのフォルダー内のすべてを削除できますRemove-Item './folder/*'。すべてのフォルダーのファイルのみを本当に消去したい場合は、すべての葉を一覧表示し、それをRemove-ItemコマンドレットにパイプすることができますGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl

62

PowerShellからのforce forceの回答:Remove-Itemのヘルプ:

このコマンドレットの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 16

Get-Help Remove-ItemUpdate-Help
わかりまし

2
Get-ChildItemには-Force引数も必要です。これにより、非表示のファイル/フォルダーも返されます。
Vlad Iliescu 2016

@MichaelFreidgeim-私はこれを使用して、断続的な障害を減らしましたが、それでも時々発生します。最上位ディレクトリでRemove-Item -recurseに問題がある場合、回避策の行でパイプ処理されたときに同様に問題にならない理由を説明できますか?Get-ChildItem -recurseは、子をボトムアップで返しません。Remove-Itemはパイプライン化された入力を並べ替えますか?
aggieNick02

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

2016サーバーコアコンピューターでは、Powershellコマンドもこれも機能しません。彼らは「空ではないので取り除けない」と言っています。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
    }
}

1

私のディレクトリはC:\ usersにあったため、管理者としてPowerShellを実行する必要がありました。

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

このコマンドは私にとってはうまくいきました。


2
副注と同じように:delはのエイリアスですRemove-Item
Michael Kargl

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 /
アンダーソンブラーツ'19

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
}

上記のスクリプトで、フォルダのフルネームを出力して削除します。よくできました...
アンダーソンブラーツ

1
こんにちはアンダーソン、2つの異なる回答を追加する予定がない場合は、回答を編集する必要があります。そのうちの1つを削除しますか?
bummi

0

これは私のために働きました:

Remove-Item C:\folder_name -Force -Recurse
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.