it-swarm-eu.dev

come svuotare recyclebin tramite prompt dei comandi?

Normalmente cancelliamo il contenuto del cestino facendo clic con il tasto destro del mouse e selezionando "Svuota cestino". Ma ho un requisito in cui ho bisogno di eliminare i contenuti del cestino utilizzando il comando Prompt. È possibile? In tal caso, come posso ottenerlo?

74
user1016403

È possibile "svuotare" in modo efficace il Cestino dalla riga di comando eliminando definitivamente la directory Cestino dell'unità che contiene i file di sistema. (Nella maggior parte dei casi, questa sarà l'unità C:, ma non dovresti codificare quel valore perché non sarà sempre vero, ma usa la variabile d'ambiente %systemdrive%.)

Il motivo per cui questa tattica funziona è perché ogni unità ha una cartella nascosta protetta con il nome $Recycle.bin, che è dove il Cestino in realtà memorizza i file e le cartelle cancellati. Quando questa directory viene cancellata, Windows crea automaticamente una nuova directory.

Quindi, per rimuovere la directory, utilizzare il comando rd (r emove d irectory) con il parametro /s, che indica che anche tutti i file e le directory all'interno della directory specificata devono essere rimossi :

rd /s %systemdrive%\$Recycle.bin

Si noti che questa azione cancellerà permanentemente tutti i file e le cartelle attualmente nel Cestino da tutti gli account utente . Inoltre, dovrai (ovviamente) eseguire il comando da un prompt di comando con privilegi elevati per disporre di privilegi sufficienti per eseguire questa azione. 

81
Cody Gray

Preferisco recycle.exe da Frank P. Westlake . Fornisce uno stato Nice prima e dopo. (Sto usando le varie utility di Frank da oltre dieci anni ..)

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.

Ha anche molti altri usi e opzioni (l'output elencato è da /?).

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"
24
wasatchwizard

nircmd ti permette di farlo digitando

nircmd.exe emptybin

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

13
Rahul

È possibile utilizzare uno script PowerShell (questo funziona anche per gli utenti con il reindirizzamento delle cartelle per non avere i propri contenitori di riciclo occupare spazio di archiviazione del server)

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

Lo script sopra è preso da qui .

Se hai Windows 10 e PowerShell 5, c'è il comando Clear-RecycleBin .

Per utilizzare Clear-RecycleBin insider PowerShell senza conferma, è possibile utilizzare Clear-RecycleBin -Force. La documentazione ufficiale può essere trovata qui

8
trythis

mentre

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

cancellerà la cartella $ RECYCLE.BIN dall'unità di sistema, che di solito è c:, si dovrebbe prendere in considerazione l'eliminazione da qualsiasi altra partizione disponibile poiché esiste una cartella $ RECYCLE.BIN nascosta in qualsiasi partizione in unità locali ed esterne ( ma non nelle unità rimovibili, come l'unità flash USB, che non hanno una cartella $ RECYCLE.BIN) . Ad esempio, ho installato un programma in d :, per eliminare i file spostati nel Cestino Dovrei correre:

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

Maggiori informazioni disponibili su Super User at Svuota cestino da riga di comando

4
Oz Edri

So di essere un po 'in ritardo per la festa, ma ho pensato che potrei contribuire alla mia soluzione soggettivamente più aggraziata.

Stavo cercando uno script che avrebbe svuotato il Cestino con una chiamata API, piuttosto che cancellare crudamente tutti i file e le cartelle dal filesystem. Avendo fallito nei miei tentativi di RecycleBinObject.InvokeVerb("Empty Recycle &Bin") (che apparentemente funziona solo in XP o precedenti), mi sono imbattuto in discussioni sull'utilizzo di una funzione incorporata in Shell32.dll chiamata SHEmptyRecycleBin() da un linguaggio compilato. Ho pensato, ehi, posso farlo in PowerShell e avvolgerlo in un ibrido di script in batch.

Salvalo con un'estensione .bat ed eseguilo per svuotare il Cestino. Eseguirlo con un interruttore /y per saltare la conferma.

<# : 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

Ecco una versione più complessa che invoca dapprima SHQueryRecycleBin() per determinare se il cestino è già vuoto prima di richiamare SHEmptyRecycleBin() . Per questo, ho eliminato la conferma choice e l'opzione /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
3
rojo

Per rimuovere furtivamente tutto, prova:

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

io uso questi comandi in un file batch per svuotare il cestino:

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

Sì, puoi creare un file batch con il seguente codice:

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

Questo in pratica crea uno script PowerShell che svuota il cestino nella directory\Desktop, quindi lo esegue.

1
Zazman

Tutte le risposte sono troppo complicate. OP ha richiesto un modo per farlo da CMD.

Ecco qua (dal file cmd):

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

E sì, si aggiornerà in Explorer.

0
Your Sister