Por lo general, eliminamos el contenido de la papelera de reciclaje haciendo clic derecho con el mouse y seleccionando "Vaciar papelera de reciclaje". Pero tengo un requisito en el que necesito eliminar el contenido de la papelera de reciclaje usando el símbolo del sistema. es posible? Si es así, ¿cómo puedo lograrlo?
windows
windows-7
command-line
batch-file
recycle-bin
usuario1016403
fuente
fuente
Respuestas:
Puede "vaciar" eficazmente la Papelera de reciclaje desde la línea de comandos eliminando permanentemente el directorio de la Papelera de reciclaje en la unidad que contiene los archivos del sistema. (En la mayoría de los casos, esta será la
C:
unidad, pero no debe codificar ese valor porque no siempre será verdadero. En su lugar, use la%systemdrive%
variable de entorno).La razón por la que esta táctica funciona es porque cada unidad tiene una carpeta oculta y protegida con el nombre
$Recycle.bin
, que es donde la Papelera de reciclaje realmente almacena los archivos y carpetas eliminados. Cuando se elimina este directorio, Windows crea automáticamente un nuevo directorio.Entonces, para eliminar el directorio, use el
rd
comando ( r emove d irectory) con el/s
parámetro, que indica que todos los archivos y directorios dentro del directorio especificado deben eliminarse también:Tenga en cuenta que esta acción eliminará permanentemente todos los archivos y carpetas que se encuentran actualmente en la Papelera de reciclaje de todas las cuentas de usuario . Además, (obviamente) tendrá que ejecutar el comando desde un símbolo del sistema elevado para tener suficientes privilegios para realizar esta acción.
fuente
$Recycle.bin
,Recycled
,Recycler
, etc e incluso se puede tener más de una si multi-boot-programas como Norton Papelera de Recuperación tienen sus propios directorios.$Recycle.bin
,Recycled
oRecycler
? ¿Hay una variable para hacer eso, o es la única forma de capturar las excepciones?/q
interruptor para querd
no le dé un mensaje adicional.rd /s /q %SYSTEMDRIVE%\$Recycle.bin
cmd /c "rd /s %systemdrive%\$Recycle.bin"
Prefiero
recycle.exe
de Frank P. Westlake . Proporciona un buen estado antes y después. (He estado usando las diversas utilidades de Frank durante más de diez años ...)También tiene muchos más usos y opciones (la salida de la lista es de /?).
fuente
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
pero no lo he encontrado. Entonces, por favor, si tiene una forma incorporada, ¡compártala!RD /S [/Q]
solución, que @wasatchwizard refutó mediante pruebas, luego la mismaRD /S [/Q]
solución exacta de repente es superior, porque está "incorporada". ¿Cómo eso tiene sentido?RD /S [/Q]
tiene los problemas descritos por @Synetech. Esta solución no lo hace.nircmd te permite hacer eso escribiendo
http://www.nirsoft.net/utils/nircmd-x64.zip
http://www.nirsoft.net/utils/nircmd.html
fuente
Puede usar un script de PowerShell (esto también funciona para usuarios con redirección de carpetas para que sus papeleras de reciclaje no ocupen espacio de almacenamiento del servidor)
La secuencia de comandos anterior se tomó de aquí .
Si tiene Windows 10 y PowerShell 5, existe el
Clear-RecycleBin
comando commandlet .Para usar
Clear-RecycleBin
dentro de PowerShell sin confirmación, puede usarClear-RecycleBin -Force
. La documentación oficial se puede encontrar aquífuente
Clear-RecycleBin
eliminé con éxito algunos nombres de carpetas con formato incorrecto en la papelera de reciclaje que no podría eliminar de otra manera.Para eliminar todo sigilosamente, intente:
fuente
Sé que llego un poco tarde a la fiesta, pero pensé que podría contribuir con mi solución subjetivamente más elegante.
Estaba buscando un script que vaciara la Papelera de reciclaje con una llamada a la API, en lugar de borrar todos los archivos y carpetas del sistema de archivos. Habiendo fallado en mis intentos
RecycleBinObject.InvokeVerb("Empty Recycle &Bin")
(que aparentemente solo funciona en XP o anterior), me topé con discusiones sobre el uso de una función incrustada en shell32.dll llamadaSHEmptyRecycleBin()
desde un lenguaje compilado. Pensé, oye, puedo hacer eso en PowerShell y envolverlo en un script híbrido por lotes.Guarde esto con una extensión .bat y ejecútelo para vaciar su Papelera de reciclaje. Ejecútelo con un
/y
interruptor para omitir la confirmación.<# : 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
Aquí hay una versión más compleja que invoca primero
SHQueryRecycleBin()
para determinar si el contenedor ya está vacío antes de la invocaciónSHEmptyRecycleBin()
. Para este, me deshice de lachoice
confirmación y el/y
cambio.<# : 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
fuente
iex
-ing es tu idea? (por cierto, es posible incrustar código C # en un archivo por lotes con tareas en línea de msbuild sin necesidad de compilar un exe)iex
esta manera. Olvidé dónde recogí que${%~f0}
es equivalentegc "%~f0"
. Fue este gato quien me atrajoout-string
. ¿Puede vincular un ejemplo de incrustación de C # en un script por lotes con msbuild? Mi Google-fu es débil hoy.mientras
eliminará la carpeta $ RECYCLE.BIN de la unidad del sistema, que generalmente es c :, uno debería considerar eliminarla de cualquier otra partición disponible, ya que hay una carpeta $ RECYCLE.BIN oculta en cualquier partición en unidades locales y externas (pero no en unidades extraíbles, como unidades flash USB, que no tienen una carpeta $ RECYCLE.BIN). Por ejemplo, instalé un programa en d :, para eliminar los archivos que movió a la Papelera de reciclaje, debería ejecutar:
Más información disponible en Superusuario en Vaciar papelera de reciclaje desde la línea de comandos
fuente
Yo uso este delineador de Powershell:
Funciona para diferentes unidades que C :, también
fuente
uso estos comandos en un archivo por lotes para vaciar la papelera de reciclaje:
fuente
Sí, puede crear un archivo por lotes con el siguiente código:
Esto básicamente crea un script de PowerShell que vacía la papelera en el directorio \ Desktop y luego lo ejecuta.
fuente
Todas las respuestas son demasiado complicadas. OP solicitó una forma de hacer esto desde CMD.
Aquí tienes (del archivo cmd):
Y sí, se actualizará en el explorador.
fuente
Crea un archivo cmd con la línea:
fuente
Puede usar este comando de PowerShell.
Nota : si desea un mensaje de confirmación, elimine el indicador -Force
fuente