コマンドプロンプトでrecyclebinを空にする方法は?


80

通常、ごみ箱の内容は、マウスで右クリックして[ごみ箱を空にする]を選択することで削除します。しかし、コマンドプロンプトを使用してごみ箱の内容を削除する必要があるという要件があります。これは可能ですか?もしそうなら、どうすればそれを達成できますか?


2
私だけのごみ箱が最大サイズに達したときにWindowsが自動的に最も古いファイルを削除してみましょうsuperuser.com/questions/69284/...を
マシュー・ロック

admin cmdプロンプトを使用するという追加の手順を必要としない方法はありますか?私のアカウントだけを実行する場合は問題ありません。PCで使用するアカウントは1つだけです。
user7428 6420

回答:


91

システムファイルを含むドライブのごみ箱ディレクトリを完全に削除することにより、コマンドラインからごみ箱を効果的に「空にする」ことができます。(ほとんどの場合、これがC:ドライブになりますが、常に真であるとは限らないため、その値をハードコーディングしないでください。代わりに、%systemdrive%環境変数を使用してください。)

この戦術が機能する理由は、各ドライブに名前が付いた非表示の保護されたフォルダがあるためです。このフォルダには$Recycle.bin、ごみ箱に削除されたファイルとフォルダが実際に保存されます。このディレクトリが削除されると、Windowsは自動的に新しいディレクトリを作成します。

したがって、ディレクトリを削除するには、パラメータを指定してrdコマンド(r emove d irectory)を使用し/sます。これは、指定したディレクトリ内のすべてのファイルとディレクトリも削除する必要があることを示します。

rd /s %systemdrive%\$Recycle.bin

このアクションにより、現在ごみ箱にあるすべてのファイルとフォルダがすべてのユーザーアカウントから完全に削除されることに注意してください。さらに、このアクションを実行するのに十分な特権を得るには、(明らかに)昇格したコマンドプロンプトからコマンドを実行する必要があります。


17
さらにいくつかの注意点:ごみ箱のステータスの変更は、実際にごみ箱を開くかデスクトップを更新するまで、エクスプローラー(デスクトップアイコン)に反映されない場合があります。特定のボリュームにのみ影響します。他のドライブのごみ箱は影響を受けないため、この方法でごみ箱を実際に空にすることはできません。•ディレクトリ名はWindowsのバージョンによって異なる場合があります(ファイルシステムも同様だと思います)。、、などの場合が$Recycle.binありRecycledRecyclerマルチブートする場合は複数ある場合もあります。ノートンリカバリビンなどのプログラムには独自のディレクトリがあります。
Synetech 2013年

1
@Synetechは、我々が把握するにはどうすればよいことがある$Recycle.binRecycledまたはRecycler?それを行うための変数はありますか、それとも例外をキャッチする唯一の方法ですか?
ペースリエ2015年

3
注:これをスクリプトで使用している場合は、/qスイッチを渡す必要があるためrd、追加のプロンプトは表示されません。rd /s /q %SYSTEMDRIVE%\$Recycle.bin
James Ko

Windows10では動作しません。このコマンドを使用しても何も起こりません。
jdhao

1
これはCMDでのみ機能することに注意してください。あなたはそれをPowerShellで実行したい場合は、してみてください cmd /c "rd /s %systemdrive%\$Recycle.bin"
Arcsector

29

recycle.exeフランクP.ウェストレイクから好きです。それは素晴らしい前後のステータスを提供します。(私はフランクのさまざまなユーティリティを10年以上使用しています。)

C:\> recycle.exe /E /F
Recycle Bin: ALL
    Recycle Bin C:  44 items, 42,613,970 bytes.
    Recycle Bin D:   0 items, 0 bytes.
            Total:  44 items, 42,613,970 bytes.

Emptying Recycle Bin: ALL
    Recycle Bin C:   0 items, 0 bytes.
    Recycle Bin D:   0 items, 0 bytes.
            Total:   0 items, 0 bytes.

また、さらに多くの用途とオプションがあります(リストされている出力は/?からのものです)。

Recycle all files and folders in C:\TEMP:
  RECYCLE C:\TEMP\*

List all DOC files which were recycled from any directory on the C: drive:
  RECYCLE /L C:\*.DOC

Restore all DOC files which were recycled from any directory on the C: drive:
  RECYCLE /U C:\*.DOC

Restore C:\temp\junk.txt to C:\docs\resume.txt:
  RECYCLE /U "C:\temp\junk.txt" "C:\docs\resume.txt"

Rename in place C:\etc\config.cfg to C:\archive\config.2007.cfg:
  RECYCLE /R "C:\etc\config.cfg" "C:\archive\config.2007.cfg"

Synetechが述べたのと同じ問題がありませんか?stackoverflow.com/questions/9238953/...
Pacerier

1
@Pacerierデスクトップにごみ箱を表示しないので、アイコンが更新されるかどうかに気付くことはありませんでした。テストした後、recycle.exeで空にすると、アイコン正しく更新されます。ディレクトリに関する限り、Win32APIを使用してごみ箱を空にしていると思います。そうは言っても、私はXP、7、8、8.1およびServer 2003、2012、2012R2を含むWindowsでこのユーティリティを長年使用してきました。(私はおそらくVistaとServer 2008でそれを使用しましたが、それらのOSをあまり長く実行しなかったので、
はっきり

1
ええ、それは特に便利なツールではありません。特に、すでにそれを行うための組み込みの方法があるからです。
ペースリエ2015年

2
@Pacerierは方法で構築されました!?キーボードやマウスでWindowsエクスプローラーをナビゲートしたいですか?デスクトップのアイコンを使用していますか(ごみ箱がデスクトップにも表示されていると仮定します)?どちらもopの質問を解決しません。履歴を削除するなど、ビンを空にするコマンドがどこかにあると本当に思いますが、RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1見つかりませんでした。ですから、組み込みの方法がある場合は、それを共有してください!
kodybrown 2015年

1
@Pacerier:最初に、このソリューションにソリューションのような欠陥があるRD /S [/Q]ことを提案します-@ wasatchwizardはテストによって反論しました-それから、まったく同じRD /S [/Q]ソリューションが「組み込み」であるため、突然優れています。それはどのように意味がありますか?RD /S [/Q]@Synetechが説明した問題があります。このソリューションはそうではありません。
zb226 2016年


11

PowerShellスクリプトを使用できます(これは、フォルダーリダイレクトを使用しているユーザーに対しても機能し、ごみ箱がサーバーのストレージスペースを占有しないようにします)

$Shell = New-Object -ComObject Shell.Application
$RecBin = $Shell.Namespace(0xA)
$RecBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}

上記のスクリプトはここから抜粋したものです。

Windows10とPowerShell5がある場合は、Clear-RecycleBinコマンドレットがあります。

Clear-RecycleBin確認なしでPowerShell内で使用するには、を使用できますClear-RecycleBin -Force。公式ドキュメントはここにあります


3
Clear RecycleBinは、Windows 10のPowerShellで役立ちます
Jin

Clear-RecycleBinごみ箱内のいくつかの不正なフォルダ名を正常に削除しましたが、他の方法では削除できませんでした。
S.タリクÇetin

5

すべてをこっそり削除するには、次のことを試してください。

rd /s /q %systemdrive%\$Recycle.bin

5

パーティーに少し遅れていることは知っていますが、主観的により優雅な解決策に貢献できるのではないかと思いました。

ファイルシステムからすべてのファイルとフォルダーを大まかに削除するのではなく、API呼び出しでごみ箱を空にするスクリプトを探していました。RecycleBinObject.InvokeVerb("Empty Recycle &Bin")(明らかにXP以前でのみ機能する)試みに失敗したのでSHEmptyRecycleBin()、コンパイルされた言語から呼び出されたshell32.dllに埋め込まれた関数を使用することについての議論に出くわしました。PowerShellでそれを実行し、バッチスクリプトハイブリッドでラップできると思いました。

これを.bat拡張子で保存し、実行してごみ箱を空にします。/y確認をスキップするには、スイッチで実行します。

<# : batch portion (begins PowerShell multi-line comment block)
:: empty.bat -- http://stackoverflow.com/a/41195176/1683264

@echo off & setlocal

if /i "%~1"=="/y" goto empty

choice /n /m "Are you sure you want to empty the Recycle Bin? [y/n] "
if not errorlevel 2 goto empty
goto :EOF

:empty
powershell -noprofile "iex (${%~f0} | out-string)" && (
    echo Recycle Bin successfully emptied.
)
goto :EOF

: end batch / begin PowerShell chimera #>
Add-Type shell32 @'
    [DllImport("shell32.dll")]
    public static extern int SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath,
        int dwFlags);
'@ -Namespace System

$SHERB_NOCONFIRMATION = 0x1
$SHERB_NOPROGRESSUI = 0x2
$SHERB_NOSOUND = 0x4

$dwFlags = $SHERB_NOCONFIRMATION
$res = [shell32]::SHEmptyRecycleBin([IntPtr]::Zero, $null, $dwFlags)

if ($res) { "Error 0x{0:x8}: {1}" -f $res,`
    (New-Object ComponentModel.Win32Exception($res)).Message }
exit $res

これはSHQueryRecycleBin()、を呼び出す前にビンがすでに空であるかどうかを判断するために最初に呼び出す、より複雑なバージョンSHEmptyRecycleBin()です。これは、choice確認と/y切り替えを取り除いたものです。

<# : batch portion (begins PowerShell multi-line comment block)
:: empty.bat -- http://stackoverflow.com/a/41195176/1683264

@echo off & setlocal
powershell -noprofile "iex (${%~f0} | out-string)"
goto :EOF

: end batch / begin PowerShell chimera #>
Add-Type @'

using System;
using System.Runtime.InteropServices;

namespace shell32 {
    public struct SHQUERYRBINFO {
        public Int32 cbSize; public UInt64 i64Size; public UInt64 i64NumItems;
    };

    public static class dll {
        [DllImport("shell32.dll")]
        public static extern int SHQueryRecycleBin(string pszRootPath,
            out SHQUERYRBINFO pSHQueryRBInfo);

        [DllImport("shell32.dll")]
        public static extern int SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath,
            int dwFlags);
    }
}
'@

$rb = new-object shell32.SHQUERYRBINFO

# for Win 10 / PowerShell v5
try { $rb.cbSize = [Runtime.InteropServices.Marshal]::SizeOf($rb) }
# for Win 7 / PowerShell v2
catch { $rb.cbSize = [Runtime.InteropServices.Marshal]::SizeOf($rb.GetType()) }

[void][shell32.dll]::SHQueryRecycleBin($null, [ref]$rb)
"Current size of Recycle Bin: {0:N0} bytes" -f $rb.i64Size
"Recycle Bin contains {0:N0} item{1}." -f $rb.i64NumItems, ("s" * ($rb.i64NumItems -ne 1))

if (-not $rb.i64NumItems) { exit 0 }

$dwFlags = @{
    "SHERB_NOCONFIRMATION" = 0x1
    "SHERB_NOPROGRESSUI" = 0x2
    "SHERB_NOSOUND" = 0x4
}
$flags = $dwFlags.SHERB_NOCONFIRMATION
$res = [shell32.dll]::SHEmptyRecycleBin([IntPtr]::Zero, $null, $flags)

if ($res) { 
    write-host -f yellow ("Error 0x{0:x8}: {1}" -f $res,`
        (New-Object ComponentModel.Win32Exception($res)).Message)
} else {
    write-host "Recycle Bin successfully emptied." -f green
}
exit $res

バッチ/ PowerShellキメラ技術の非常に優れた改善(+1)。あるiex-ingあなたの考えは?(ところで、exeをコンパイルせずにmsbuildインラインタスクを使用してバッチファイルにC#コードを埋め込むことができます)
npocmaka 2017年

@npocmakaありがとう!他の多くの人がiexこのように使っていると思います。どこで拾ったのか忘れてしまい${%~f0}ましたgc "%~f0"。私をに向けたのはこの猫でしたout-string。バッチスクリプトにC#を埋め込む例をmsbuildにリンクできますか?私のグーグルフーは今日弱いです。
rojo 2017年

1
ここ-dostips.com/forum/…-コマンドライン引数を直接渡すことはできませんが、後でc#部分から抽出できる引数を使用して変数を定義する必要があります
npocmaka 2017年

上記の例では、.netバージョンはパラメーター化されていません。
npocmaka 2017年

4

一方

rd / s / q%systemdrive%\ $ RECYCLE.BIN

$ RECYCLE.BINフォルダをシステムドライブ(通常はc :)から削除します。ローカルドライブと外部ドライブのパーティションには非表示の$ RECYCLE.BINフォルダがあるため、他の使用可能なパーティションから削除することを検討する必要があります(ただし、 $ RECYCLE.BINフォルダを持たないUSBフラッシュドライブなどのリムーバブルドライブ)。たとえば、d:にプログラムをインストールしました。プログラムがごみ箱に移動したファイルを削除するには、次のコマンドを実行する必要があります。

rd / s /qd:\$RECYCLE.BIN

コマンドラインから空のごみ箱のスーパーユーザーで利用可能な詳細情報


ああ、私は上記の提案されたコマンドが機能しなかった理由を理解しようとしてきました。f:を指定すると、機能しました。どうもありがとう!<3
フィル2015年

4

私はこのPowerShellonelinerを使用します:

gci C:\`$recycle.bin -force | remove-item -recurse -force

C:とは異なるドライブでも動作します


3

バッチファイルでこれらのコマンドを使用して、ごみ箱を空にします。

del /q /s %systemdrive%\$Recycle.bin\*
for /d %%x in (%systemdrive%\$Recycle.bin\*) do @rd /s /q "%%x"

2

はい、次のコードでバッチファイルを作成できます。

cd \Desktop

echo $Shell = New-Object -ComObject Shell.Application >>FILENAME.ps1
echo $RecBin = $Shell.Namespace(0xA) >>FILENAME.ps1
echo $RecBin.Items() ^| %%{Remove-Item $_.Path -Recurse -Confirm:$false} >>FILENAME.ps1


REM The actual lines being writen are right, exept for the last one, the actual thigs being writen are "$RecBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}"   
But since | and % screw things up, i had to make some changes.

Powershell.exe -executionpolicy remotesigned -File  C:\Desktop\FILENAME.ps1

これは基本的に、\ Desktopディレクトリのゴミ箱を空にして実行するPowerShellスクリプトを作成します。


0

すべての答えはあまりにも複雑です。OPは、CMDからこれを行う方法を要求しました。

ここに行きます(cmdファイルから):

powershell.exe /c "$(New-Object -ComObject Shell.Application).NameSpace(0xA).Items() | %%{Remove-Item $_.Path -Recurse -Confirm:$false"

はい、エクスプローラーで更新されます。


0

次の行でcmdファイルを作成します。

for %%p in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%p:\$Recycle.Bin" rundll32.exe advpack.dll,DelNodeRunDLL32 "%%p:\$Recycle.Bin"

0

このPowerShellコマンドを使用できます。

Clear-RecycleBin -Force

:確認プロンプトが必要な場合は、-Forceフラグを削除してください

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