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?
È 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.
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"
nircmd ti permette di farlo digitando
nircmd.exe emptybin
http://www.nirsoft.net/utils/nircmd-x64.Zip
http://www.nirsoft.net/utils/nircmd.html
È 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
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
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
Per rimuovere furtivamente tutto, prova:
rd /s /q %systemdrive%\$Recycle.bin
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"
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.
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.