Habituellement, nous supprimons le contenu de la corbeille en cliquant dessus avec le bouton droit de la souris et en sélectionnant "Vider la corbeille". Mais j'ai une exigence où je dois supprimer le contenu de la corbeille à l'aide de la commande Invite. Est-ce possible? Si oui, comment puis-je y parvenir?
Vous pouvez effectivement "vider" la corbeille à partir de la ligne de commande en supprimant définitivement le répertoire de la corbeille sur le lecteur contenant les fichiers système. (Dans la plupart des cas, il s'agira du lecteur C:
, mais vous ne devriez pas coder cette valeur en dur car elle ne sera pas toujours vraie. Utilisez plutôt la variable d'environnement %systemdrive%
.)
La raison pour laquelle cette tactique fonctionne est parce que chaque lecteur a un dossier caché et protégé portant le nom $Recycle.bin
, qui est l'endroit où la Corbeille stocke réellement les fichiers et les dossiers supprimés. Lorsque ce répertoire est supprimé, Windows crée automatiquement un nouveau répertoire.
Donc, pour supprimer le répertoire, utilisez la commande rd
(r emove d irectory) avec le paramètre /s
, qui indique que tous les fichiers et répertoires du répertoire spécifié doivent également être supprimés. :
rd /s %systemdrive%\$Recycle.bin
Notez que cette action supprimera définitivement tous les fichiers et dossiers actuellement dans la Corbeille de tous les comptes d’utilisateur . De plus, vous devrez (évidemment) exécuter la commande à partir d'une invite élevée de commande afin de disposer des privilèges suffisants pour effectuer cette action.
Je préfère recycle.exe
de Frank P. Westlake . Il fournit un statut Nice avant et après. (J'utilise les divers utilitaires de Frank depuis plus de dix ans ..)
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.
Il a également beaucoup plus d'utilisations et d'options (la sortie listée est 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"
nircmd vous permet de le faire en tapant
nircmd.exe emptybin
http://www.nirsoft.net/utils/nircmd-x64.Zip
http://www.nirsoft.net/utils/nircmd.html
Vous pouvez utiliser un script PowerShell (cela fonctionne aussi pour les utilisateurs avec la redirection de dossiers pour ne pas que leurs corbeilles utilisent beaucoup d'espace de stockage sur le serveur)
$Shell = New-Object -ComObject Shell.Application
$RecBin = $Shell.Namespace(0xA)
$RecBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}
Le script ci-dessus est tiré de ici .
Si vous avez Windows 10 et PowerShell 5, il existe le commandlet Clear-RecycleBin
.
Pour utiliser Clear-RecycleBin
initié PowerShell sans confirmation, vous pouvez utiliser Clear-RecycleBin -Force
. Les documents officiels peuvent être trouvés ici
tandis que
rd/s/q% systemdrive%\$ RECYCLE.BIN
supprimera le dossier $ RECYCLE.BIN du lecteur système, qui est généralement c:, On devrait envisager de le supprimer de toute autre partition disponible car il existe un dossier caché $ RECYCLE.BIN dans toute partition des lecteurs locaux et externes ( Par exemple, j'ai installé un programme dans d :, afin de supprimer les fichiers qu'il a déplacés vers la corbeille. Je devrais courir:
rd/s/q d:\$ RECYCLE.BIN
Plus d'informations disponibles sur Super User à Vider le bac de récupération à partir de la ligne de commande
J'utilise cet oneliner powershell:
gci C:\`$recycle.bin -force | remove-item -recurse -force
Fonctionne pour d'autres lecteurs que C :, aussi
Je sais que je suis un peu en retard à la fête, mais je pensais pouvoir apporter ma solution subjectivement plus gracieuse.
Je recherchais un script qui viderait la corbeille à l'aide d'un appel d'API, au lieu de supprimer grossièrement tous les fichiers et dossiers du système de fichiers. Ayant échoué dans mes tentatives de RecycleBinObject.InvokeVerb("Empty Recycle &Bin")
(qui ne fonctionne apparemment que dans XP ou dans une version plus ancienne), je suis tombé par hasard sur l'utilisation d'une fonction intégrée à Shell32.dll appelée SHEmptyRecycleBin()
depuis un langage compilé. Je me suis dit que je pouvais le faire dans PowerShell et l’envelopper dans un script batch hybride.
Enregistrez-le avec une extension .bat et exécutez-le pour vider votre corbeille. Exécutez-le avec un commutateur /y
pour ignorer la confirmation.
<# : 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
Voici une version plus complexe qui appelle d’abord SHQueryRecycleBin()
pour déterminer si la corbeille est déjà vide avant d’appeler SHEmptyRecycleBin()
. Pour celui-ci, je me suis débarrassé de la confirmation choice
et du commutateur /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
Pour tout effacer furtivement, essayez:
rd /s /q %systemdrive%\$Recycle.bin
j'utilise ces commandes dans un fichier batch pour vider la corbeille:
del /q /s %systemdrive%\$Recycle.bin\*
for /d %%x in (%systemdrive%\$Recycle.bin\*) do @rd /s /q "%%x"
Oui, vous pouvez créer un fichier batch avec le code suivant:
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
Cela crée essentiellement un script PowerShell qui vide la corbeille dans le répertoire\Desktop, puis l'exécute.
Toutes les réponses sont trop compliquées. OP a demandé un moyen de le faire à CMD.
Ici vous allez (à partir du fichier cmd):
powershell.exe /c "$(New-Object -ComObject Shell.Application).NameSpace(0xA).Items() | %%{Remove-Item $_.Path -Recurse -Confirm:$false"
Et oui, il sera mis à jour dans Explorer.