it-swarm.com.de

wie leert man recyclebin über die Eingabeaufforderung?

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?

74
user1016403

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. 

81
Cody Gray

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

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

13
Rahul

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

8
trythis

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

4
Oz Edri

Ich benutze diesen Powershell Oneliner:

gci C:\`$recycle.bin -force | remove-item -recurse -force

Funktioniert auch für andere Laufwerke als C:

3
rko281

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
3
rojo

Um alles heimlich zu entfernen, versuchen Sie Folgendes:

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

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"
3
pardeew

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.

1
Zazman

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.

0
Your Sister