web-dev-qa-db-ja.com

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

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

75
user1016403

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

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

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

rd /s %systemdrive%\$Recycle.bin

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

83
Cody Gray

Frank P. Westlakerecycle.exeが好きです。ステータスの前後にニースを提供します。 (私はフランクのさまざまなユーティリティを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"
25
wasatchwizard

nircmdでは、次のように入力して、

nircmd.exe emptybin

http://www.nirsoft.net/utils/nircmd-x64.Zip
http://www.nirsoft.net/utils/nircmd.html

14
Rahul

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

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

上記のスクリプトは here から取られています。

Windows 10とPowerShell 5を使用している場合、 Clear-RecycleBin commandlet があります。

確認なしでClear-RecycleBin Insider PowerShellを使用するには、Clear-RecycleBin -Forceを使用できます。公式のドキュメントを見つけることができます こちら

8
trythis

私はこのPowershell Oneライナーを使用します:

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

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

4
rko281

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

私は、ファイルシステムからすべてのファイルとフォルダーを大雑把に削除するのではなく、API呼び出しでごみ箱を空にするスクリプトを探していました。 RecycleBinObject.InvokeVerb("Empty Recycle &Bin")(明らかにXPまたはそれ以上でのみ動作する)の試みに失敗したため、Shell32.dllに組み込まれている SHEmptyRecycleBin() という名前の関数の使用に関する議論につまずいた。 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
4
rojo

ながら

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

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

rd/s/q d:\ $ RECYCLE.BIN

詳細については、スーパーユーザーの コマンドラインからのごみ箱を空にする

4
Oz Edri

すべてを密かに削除するには、次を試してください:

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

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

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

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

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スクリプトを作成します。

1
Zazman

答えはすべて非常に複雑です。 OPはCMDにこれを行う方法を要求しました。

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

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

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

0
Your Sister