Normalerweise löschen wir den Papierkorbinhalt, indem Sie mit der rechten Maustaste darauf klicken und "Papierkorb leeren" auswählen. Ich habe jedoch eine Anforderung, bei der ich den Papierkorbinhalt mit dem Befehl Eingabeaufforderung löschen muss. Ist das möglich? Wenn ja, wie kann ich das erreichen?
Sie können den Papierkorb effektiv über die Befehlszeile "leeren", indem Sie das Verzeichnis "Papierkorb" auf dem Laufwerk, das die Systemdateien enthält, dauerhaft löschen. (In den meisten Fällen ist dies das Laufwerk C:
, aber Sie sollten diesen Wert nicht fest codieren, da er nicht immer wahr ist. Verwenden Sie stattdessen die Umgebungsvariable %systemdrive%
.)
Der Grund für diese Taktik besteht darin, dass jedes Laufwerk über einen versteckten, geschützten Ordner mit dem Namen $Recycle.bin
verfügt, 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.
Um das Verzeichnis zu entfernen, verwenden Sie den Befehl rd
(r emove d irectory) mit dem Parameter /s
, der angibt, dass alle Dateien und Verzeichnisse im angegebenen Verzeichnis vorhanden sein sollen auch entfernt werden:
rd /s %systemdrive%\$Recycle.bin
Beachten Sie, dass diese Aktion permanent alle Dateien und Ordner löscht, die sich derzeit im Papierkorb befinden, und zwar aus allen Benutzerkonten. Darüber hinaus müssen Sie den Befehl (offensichtlich) über eine Eingabeaufforderung mit erhöhtem Befehl ausführen, um über ausreichende Berechtigungen zum Ausführen dieser Aktion zu verfügen.
Ich bevorzuge recycle.exe
von Frank P. Westlake . Es bietet einen Nice-Status vor und nach. (Ich benutze Franks verschiedene Hilfsprogramme schon seit über zehn Jahren.)
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.
Es hat auch viele weitere Verwendungen und Optionen (Ausgabe ist von /?).
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"
Mit nircmd können Sie dies durch Eingabe tun
nircmd.exe emptybin
http://www.nirsoft.net/utils/nircmd-x64.Zip
http://www.nirsoft.net/utils/nircmd.html
Sie können ein Powershell-Skript verwenden (dies funktioniert auch für Benutzer mit Ordnerumleitung, damit die Papierkörbe nicht den Serverspeicherplatz belegen.)
$Shell = New-Object -ComObject Shell.Application
$RecBin = $Shell.Namespace(0xA)
$RecBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}
Das obige Skript stammt aus hier .
Wenn Sie Windows 10 und Powershell 5 haben, gibt es das Clear-RecycleBin
-Commandlet .
Um Clear-RecycleBin
-Insider-PowerShell ohne Bestätigung zu verwenden, können Sie Clear-RecycleBin -Force
verwenden. Offizielle Unterlagen finden Sie hier
während
rd/s/q% systemdrive%\$ RECYCLE.BIN
löscht den Ordner $ RECYCLE.BIN vom Systemlaufwerk (normalerweise c:, ). Es sollte in Betracht gezogen werden, ihn aus anderen verfügbaren Partitionen zu löschen, da in jeder Partition in lokalen und externen Laufwerken ein versteckter Ordner $ RECYCLE.BIN ( aber nicht auf Wechseldatenträgern, wie z. B. einem USB-Flashlaufwerk, das keinen Ordner "$ RECYCLE.BIN" hat) ..__ Zum Beispiel habe ich ein Programm in d: installiert, um die darin gelöschten Dateien in den Papierkorb zu löschen Ich sollte laufen:
rd/s/q d:\$ RECYCLE.BIN
Weitere Informationen finden Sie unter Super User unter Leerer Papierkorb von der Kommandozeile aus
Ich benutze diesen Powershell Oneliner:
gci C:\`$recycle.bin -force | remove-item -recurse -force
Funktioniert auch für andere Laufwerke als C:
Ich weiß, ich bin ein bisschen spät zur Party, aber ich dachte, ich könnte meine subjektiv anmutigere Lösung einbringen.
Ich habe nach einem Skript gesucht, das den Papierkorb mit einem API-Aufruf leert, anstatt alle Dateien und Ordner aus dem Dateisystem zu löschen. Nachdem meine Versuche, RecycleBinObject.InvokeVerb("Empty Recycle &Bin")
(was anscheinend nur in XP oder älter) funktioniert, fehlgeschlagen sind, stolperte ich über die Verwendung einer in Shell32.dll eingebetteten Funktion namens SHEmptyRecycleBin()
aus einer kompilierten Sprache. Ich dachte, hey, ich kann das in PowerShell tun und es in einen Batch-Skript-Hybrid packen.
Speichern Sie dies mit einer 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 SHQueryRecycleBin()
aufruft, um festzustellen, ob die Bin vor dem Aufruf von SHEmptyRecycleBin()
bereits leer ist. In diesem Fall habe ich die choice
-Bestätigung und den /y
-Schalter losgelassen.
<# : 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
Um alles heimlich zu entfernen, versuchen Sie Folgendes:
rd /s /q %systemdrive%\$Recycle.bin
ich verwende diese Befehle in einer Batchdatei, um den Papierkorb zu leeren:
del /q /s %systemdrive%\$Recycle.bin\*
for /d %%x in (%systemdrive%\$Recycle.bin\*) do @rd /s /q "%%x"
Ja, Sie können eine Batch-Datei mit folgendem Code erstellen:
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
Dadurch wird im Wesentlichen ein Powershell-Skript erstellt, das den Papierkorb im Verzeichnis\Desktop leert und dann ausführt.
Alle Antworten sind viel zu kompliziert. Das OP hat von CMD eine Möglichkeit dazu angefordert.
Hier geht es (aus der cmd-Datei):
powershell.exe /c "$(New-Object -ComObject Shell.Application).NameSpace(0xA).Items() | %%{Remove-Item $_.Path -Recurse -Confirm:$false"
Und ja, es wird im Explorer aktualisiert.