windows windows-7 command-line batch-file recycle-bin
http://www.nirsoft.net/utils/nircmd-x64.zip

windows - cómo vaciar recyclebin a través del símbolo del sistema?



windows-7 command-line (10)

Por lo general, eliminamos el contenido de la papelera de reciclaje haciendo clic con el botón derecho del mouse y seleccionando "Vaciar papelera de reciclaje". Pero tengo un requisito donde necesito eliminar el contenido de la papelera de reciclaje usando el símbolo del sistema. es posible? Si es así, ¿cómo puedo lograrlo?


Para eliminar sigilosamente todo, intente:

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


Prefiero recycle.exe de Frank P. Westlake . Proporciona un buen estado de antes y después. (He estado usando varias utilidades de Frank durante más de diez años ...)

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.

También tiene muchos más usos y opciones (el resultado listado es de /?).

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"


Sé que llegué 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 API, en lugar de eliminar toscamente todos los archivos y carpetas del sistema de archivos. Después de haber fallado en mis intentos de RecycleBinObject.InvokeVerb("Empty Recycle &Bin") (que aparentemente solo funciona en XP o anterior), tropecé con discusiones sobre el uso de una función incrustada en shell32.dll llamada SHEmptyRecycleBin() desde un lenguaje compilado. Pensé, hey, puedo hacer eso en PowerShell y envolverlo en un script por lotes híbrido.

Guarde esto con una extensión .bat y ejecútelo para vaciar su Papelera de reciclaje. Ejecútelo con un interruptor /y para omitir la confirmación.

<# : batch portion (begins PowerShell multi-line comment block) :: empty.bat -- http://.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 primero invoca SHQueryRecycleBin() para determinar si el contenedor ya está vacío antes de invocar a SHEmptyRecycleBin() . Para este, me deshice de la confirmación de choice y /y cambio.

<# : batch portion (begins PowerShell multi-line comment block) :: empty.bat -- http://.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


Sí, puede hacer un archivo por lotes con el siguiente código:

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

Esto básicamente crea un script powershell que vacía la basura en el directorio / Desktop y luego la ejecuta.


Yo uso este Powershell oneliner:

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

Funciona para diferentes unidades que C :, también


mientras

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

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 una unidad 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 que debería ejecutar:

rd / s /qd:/$RECYCLE.BIN

Más información disponible en Super User at Empty reciclaje bin from command line


utilice un script powershell (esto funciona para los usuarios con redirección de carpetas y para que sus contenedores de reciclaje no ocupen el espacio de almacenamiento del servidor)

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

tomado de http://aramblinggeek.com/powershell-empty-recycle-bin

o si tiene Windows 10 y PowerShell 5, existe el comando clear-recyclebin https://blogs.technet.microsoft.com/heyscriptingguy/2015/08/04/powertip-use-powershell-5-to-clear-recycle-bin/


utilizo estos comandos en un archivo por lotes para vaciar la papelera de reciclaje:

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



Puede "vaciar" efectivamente la Papelera de reciclaje desde la línea de comando 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 unidad C: , pero no debe codificar ese valor porque no siempre será cierto. En su lugar, use la variable de entorno %systemdrive% ).

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.

Por lo tanto, para eliminar el directorio, use el comando rd ( r emove d irectory) con el parámetro /s , que indica que todos los archivos y directorios dentro del directorio especificado deben eliminarse también:

rd /s %systemdrive%/$Recycle.bin

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, deberá (obviamente) ejecutar el comando desde un símbolo del sistema elevado para tener suficientes privilegios para realizar esta acción.