Normalerweise löschen wir den Inhalt des Papierkorbs, indem wir mit der rechten Maustaste darauf klicken und "Papierkorb leeren" auswählen. Ich habe jedoch eine Anforderung, bei der ich den Inhalt des Papierkorbs über die Eingabeaufforderung löschen muss. Ist das möglich? Wenn ja, wie kann ich das erreichen?
windows
windows-7
command-line
batch-file
recycle-bin
user1016403
quelle
quelle
Antworten:
Sie können den Papierkorb effektiv über die Befehlszeile "leeren", indem Sie das Papierkorbverzeichnis auf dem Laufwerk, das die Systemdateien enthält, dauerhaft löschen. (In den meisten Fällen ist dies das
C:
Laufwerk, aber Sie sollten diesen Wert nicht fest codieren, da er nicht immer wahr ist. Verwenden Sie stattdessen die%systemdrive%
Umgebungsvariable.)Der Grund, warum diese Taktik funktioniert, liegt darin, dass jedes Laufwerk einen versteckten, geschützten Ordner mit dem Namen hat
$Recycle.bin
, in dem der Papierkorb die gelöschten Dateien und Ordner tatsächlich speichert. Wenn dieses Verzeichnis gelöscht wird, erstellt Windows automatisch ein neues Verzeichnis.Also, um das Verzeichnis zu entfernen, verwenden Sie den
rd
Befehl ( r emove d irectory) mit dem/s
Parameter, der angibt , dass alle Dateien und Verzeichnisse im angegebenen Verzeichnis als auch entfernt werden sollte:Beachten Sie, dass durch diese Aktion alle Dateien und Ordner, die sich derzeit im Papierkorb befinden, dauerhaft aus allen Benutzerkonten gelöscht werden . Außerdem müssen Sie den Befehl (offensichtlich) an einer Eingabeaufforderung mit erhöhten Rechten ausführen, um über ausreichende Berechtigungen zum Ausführen dieser Aktion zu verfügen.
quelle
$Recycle.bin
,Recycled
,Recycler
etc. und Sie können sogar mehr als ein, wenn Sie Multi-Boot-Programme wie Norton Recovery Bin ihre eigenen Verzeichnisse haben.$Recycle.bin
,Recycled
oderRecycler
? Gibt es eine Variable, um dies zu tun, oder ist der einzige Weg, die Ausnahmen abzufangen?/q
Schalter übergeben, damitrd
Sie keine zusätzliche Eingabeaufforderung erhalten.rd /s /q %SYSTEMDRIVE%\$Recycle.bin
cmd /c "rd /s %systemdrive%\$Recycle.bin"
Ich bevorzuge
recycle.exe
von Frank P. Westlake . Es bietet einen schönen Vorher-Nachher-Status. (Ich benutze Franks verschiedene Dienstprogramme seit mehr als zehn Jahren.)Es hat auch viel mehr Verwendungen und Optionen (die aufgelistete Ausgabe stammt von /?).
quelle
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
aber ich habe ihn nicht gefunden. Also, bitte, wenn Sie einen eingebauten Weg haben, teilen Sie ihn bitte!RD /S [/Q]
Lösung aufweist, die @wasatchwizard durch Tests widerlegt hat. Dann ist genau dieselbeRD /S [/Q]
Lösung plötzlich überlegen, weil sie "eingebaut" ist. Wie macht das Sinn?RD /S [/Q]
hat die Probleme @Synetech beschrieben. Diese Lösung funktioniert nicht.Mit nircmd können Sie dies durch Eingabe tun
http://www.nirsoft.net/utils/nircmd-x64.zip
http://www.nirsoft.net/utils/nircmd.html
quelle
Sie können ein Powershell-Skript verwenden (dies funktioniert auch für Benutzer mit Ordnerumleitung, damit ihre Papierkörbe keinen Serverspeicherplatz belegen).
Das obige Skript stammt von hier .
Wenn Sie Windows 10 und Powershell 5 haben, gibt es das
Clear-RecycleBin
Commandlet .So verwenden Sie
Clear-RecycleBin
innerhalb Powershell ohne Bestätigung, können Sie verwendenClear-RecycleBin -Force
. Offizielle Unterlagen finden Sie hierquelle
Clear-RecycleBin
Einige fehlerhafte Ordnernamen im Papierkorb wurden erfolgreich gelöscht, die ich sonst nicht entfernen konnte.Versuchen Sie Folgendes, um alles heimlich zu entfernen:
quelle
Ich weiß, dass ich etwas spät zur Party komme, aber ich dachte, ich könnte meine subjektiv anmutigere Lösung einbringen.
Ich suchte nach einem Skript, das den Papierkorb mit einem API-Aufruf leert, anstatt alle Dateien und Ordner grob aus dem Dateisystem zu löschen. Nachdem meine Versuche fehlgeschlagen waren
RecycleBinObject.InvokeVerb("Empty Recycle &Bin")
(was anscheinend nur unter XP oder älter funktioniert), stieß ich auf Diskussionen über die Verwendung einer in shell32.dll eingebetteten Funktion, dieSHEmptyRecycleBin()
aus einer kompilierten Sprache aufgerufen wurde . Ich dachte, hey, ich kann das in PowerShell tun und es in einen Batch-Skript-Hybrid einbinden.Speichern Sie dies mit der Erweiterung .bat und führen Sie es aus, um den Papierkorb zu leeren. Führen Sie es mit einem
/y
Schalter aus, um die Bestätigung zu überspringen.<# : 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
Hier ist eine komplexere Version, die zuerst aufgerufen wird,
SHQueryRecycleBin()
um festzustellen, ob der Behälter vor dem Aufrufen bereits leer istSHEmptyRecycleBin()
. In diesem Fall habe ich diechoice
Bestätigung und den/y
Wechsel entfernt.<# : 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
quelle
iex
-ing deine Idee? (Übrigens ist es möglich, C # -Code mit msbuild Inline-Tasks in eine Batch-Datei einzubetten, ohne exe kompilieren zu müssen)iex
diesen Weg benutzt. Ich vergesse, wo ich abgeholt habe, das${%~f0}
entsprichtgc "%~f0"
. Es war diese Katze, die mich anmachteout-string
. Können Sie ein Beispiel für die Einbettung von C # in ein Batch-Skript mit msbuild verknüpfen? Mein Google-Fu ist heute schwach.während
löscht den Ordner $ RECYCLE.BIN vom Systemlaufwerk, was normalerweise c: ist. Man sollte in Betracht ziehen, ihn von anderen verfügbaren Partitionen zu löschen, da sich in jeder Partition auf lokalen und externen Laufwerken ein versteckter Ordner $ RECYCLE.BIN befindet (jedoch nicht in Wechseldatenträger wie USB-Sticks ohne Ordner $ RECYCLE.BIN). Zum Beispiel habe ich ein Programm in d: installiert, um die Dateien zu löschen, die in den Papierkorb verschoben wurden, den ich ausführen sollte:
Weitere Informationen finden Sie unter Super User unter Leerer Papierkorb über die Befehlszeile
quelle
Ich benutze diesen Powershell-Oneliner:
Funktioniert auch für andere Laufwerke als C:
quelle
Ich benutze diese Befehle in einer Batch-Datei, um den Papierkorb zu leeren:
quelle
Ja, Sie können eine Batch-Datei mit dem folgenden Code erstellen:
Dadurch wird im Grunde ein Powershell-Skript erstellt, das den Papierkorb im Verzeichnis \ Desktop leert und dann ausführt.
quelle
Alle Antworten sind viel zu kompliziert. OP hat CMD um eine Möglichkeit gebeten, dies zu tun.
Los geht's (aus der Cmd-Datei):
Und ja, es wird im Explorer aktualisiert.
quelle
Erstellen Sie eine Cmd-Datei mit Zeile:
quelle
Sie können diesen PowerShell-Befehl verwenden.
Hinweis : Wenn Sie eine Bestätigungsaufforderung wünschen, entfernen Sie das Flag -Force
quelle