如何通过命令提示符清空recyclebin?

通常我们通过鼠标右键单击并select“清空回收站”来删除回收站内容。 但我有一个要求,我需要使用命令提示符删除回收站内容。 这可能吗? 如果是这样,我该如何实现呢?

通过永久删除包含系统文件的驱动器上的回收站目录,可以从命令行有效“清空”回收站。 (在大多数情况下,这将是C:驱动器,但是不应该对该值进行硬编码,因为它不总是为真,而是使用%systemdrive%环境变量。

这个策略的原因是因为每个驱动器都有一个名为$Recycle.bin的隐藏的受保护的文件夹,这个文件夹是回收站实际存储删除的文件和文件夹的地方。 当这个目录被删除时,Windows会自动创建一个新的目录。

因此,要删除目录,请使用带有/s参数的rd命令( r emove d irectory),该命令指示指定目录中的所有文件和目录也应该删除:

 rd /s %systemdrive%\$Recycle.bin 

请注意,此操作将从所有用户帐户中 永久删除回收站中当前的所有文件和文件夹。 此外,您将(显然)必须从提升的命令提示符处运行该命令才能拥有足够的权限来执行此操作。

我更喜欢Frank P. Westlake的 recycle.exe 它提供了一个很好的前后状态。 (我已经使用弗兰克的各种公用事业超过十年..)

 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 /LC:\*.DOC Restore all DOC files which were recycled from any directory on the C: drive: RECYCLE /UC:\*.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" 

使用powershell脚本(这适用于文件夹重定向的用户以及没有他们的回收站占用服务器存储空间)

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

取自http://aramblinggeek.com/powershell-empty-recycle-bin

或者如果你有Windows 10和PowerShell 5,那么有clear-recyclebin命令小节https://blogs.technet.microsoft.com/heyscriptingguy/2015/08/04/powertip-use-powershell-5-to-clear-recycle-斌/

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

将从系统驱动器(通常是c:\)中删除$ RECYCLE.BIN文件夹,因为在本地和外部驱动器的任何分区中都有一个隐藏的$ RECYCLE.BIN文件夹,所以应该考虑从其他分区中删除它可移动驱动器,如USB闪存驱动器,没有$ RECYCLE.BIN文件夹)。 例如,我在d:中安装了一个程序,为了删除它移动到回收站的文件,我应该运行:

rd / s /qd:\$RECYCLE.BIN

超级用户可以从命令行清空回收站获取更多信息

我知道我对派对有点迟,但是我想我可能会主动提出更优雅的解决方案。

我正在寻找一个脚本,用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()之前bin是否已经是空的。 对于这个,我摆脱了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 

要悄悄地删除所有内容,请尝试:

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

我使用这个powershell oneliner:

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

适用于不同于C:的驱动器

我在批处理文件中使用这些命令来清空回收站:

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