it-swarm.dev

como esvaziar o recyclebin através do prompt de comando?

Normalmente, excluímos o conteúdo da lixeira clicando com o botão direito do mouse e selecionando "Esvaziar Lixeira". Mas eu tenho um requisito onde eu preciso excluir o conteúdo da lixeira usando o comando Prompt. Isso é possível? Se sim, como posso alcançá-lo?

74
user1016403

Você pode efetivamente "esvaziar" a Lixeira da linha de comando excluindo permanentemente o diretório Lixeira da unidade que contém os arquivos do sistema. (Na maioria dos casos, essa será a unidade C:, mas você não deve codificar esse valor porque nem sempre será verdadeiro. Em vez disso, use a variável de ambiente %systemdrive%.)

A razão pela qual essa tática funciona é porque cada unidade tem uma pasta oculta e protegida com o nome $Recycle.bin, que é onde a Lixeira realmente armazena os arquivos e pastas excluídos. Quando esse diretório é excluído, o Windows cria automaticamente um novo diretório.

Portanto, para remover o diretório, use o comando rd (r emoved irectory) com o parâmetro /s, que indica que todos os arquivos e diretórios dentro do diretório especificado também devem ser removidos. :

rd /s %systemdrive%\$Recycle.bin

Note que esta ação irá permanentemente excluir todos os arquivos e pastas atualmente na Lixeira de todas as contas de usuário . Além disso, você terá (obviamente) que executar o comando a partir de um prompt de comando elevado, a fim de ter privilégios suficientes para executar essa ação. 

81
Cody Gray

Eu prefiro recycle.exe de Frank P. Westlake . Ele fornece um bom status antes e depois. (Eu tenho usado vários utilitários de Frank por mais de dez anos ..)

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.

Também tem muitos mais usos e opções (a saída listada é 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"
24
wasatchwizard

nircmd permite que você faça isso digitando

nircmd.exe emptybin

http://www.nirsoft.net/utils/nircmd-x64.Zip
http://www.nirsoft.net/utils/nircmd.html

13
Rahul

Você pode usar um script powershell (isso funciona para usuários com redirecionamento de pasta, assim como para não ter suas lixeiras ocupando espaço de armazenamento no servidor)

$Shell = New-Object -ComObject Shell.Application
$RecBin = $Shell.Namespace(0xA)
$RecBin.Items() | %{Remove-Item $_.Path -Recurse -Confirm:$false}

O script acima é tirado de aqui .

Se você tem o Windows 10 e o PowerShell 5, existe o comando Clear-RecycleBin .

Para usar o PowerShell de Clear-RecycleBin insider sem confirmação, você pode usar Clear-RecycleBin -Force. Documentação oficial pode ser encontrada aqui

8
trythis

enquanto

rd/s/q% systemdrive%\$ RECYCLE.BIN

excluirá a pasta $ RECYCLE.BIN da unidade do sistema, que geralmente é c:, , deve-se considerar excluí-la de qualquer outra partição disponível, pois há uma pasta oculta $ RECYCLE.BIN em qualquer partição local e externa. unidades (mas não em unidades removíveis, como a unidade flash USB, que não tem uma pasta $ RECYCLE.BIN). Por exemplo, eu instalei um programa em d :, a fim de excluir os arquivos movidos para a Lixeira eu deveria executar:

rd/s/q d:\$ RECYCLE.BIN

Mais informações disponíveis em Super User em Empty recycling bin from command line

4
Oz Edri

Eu uso este powershell um forro:

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

Funciona para unidades diferentes de C :, também

3
rko281

Eu sei que estou um pouco atrasado para a festa, mas achei que poderia contribuir com minha solução mais graciosa.

Eu estava procurando um script que esvaziasse a Lixeira com uma chamada de API, em vez de excluir de forma grosseira todos os arquivos e pastas do sistema de arquivos. Tendo falhado em minhas tentativas de RecycleBinObject.InvokeVerb("Empty Recycle &Bin") (que aparentemente só funciona em XP ou mais), me deparei com discussões sobre o uso de uma função incorporada em Shell32.dll chamada SHEmptyRecycleBin() de uma linguagem compilada. Eu pensei, ei, eu posso fazer isso no PowerShell e envolvê-lo em um script de lote híbrido.

Salve isso com uma extensão .bat e execute-a para esvaziar sua Lixeira. Execute-o com um switch /y para pular a confirmação.

<# : 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

Aqui está uma versão mais complexa que primeiro invoca SHQueryRecycleBin() para determinar se o bin já está vazio antes de invocar SHEmptyRecycleBin() . Para este, eu me livrei da opção choice confirmation e /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
3
rojo

Para remover tudo, tente:

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

eu uso esses comandos em um arquivo de lote para esvaziar a lixeira:

del /q /s %systemdrive%\$Recycle.bin\*
for /d %%x in (%systemdrive%\$Recycle.bin\*) do @rd /s /q "%%x"
3
pardeew

Sim, você pode criar um arquivo em lote com o seguinte código:

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

Basicamente, isso cria um script powershell que esvazia a lixeira no diretório\Desktop e a executa.

1
Zazman

Todas as respostas são muito complicadas. OP solicitou uma maneira de fazer isso no CMD.

Aqui você vai (do arquivo cmd):

powershell.exe /c "$(New-Object -ComObject Shell.Application).NameSpace(0xA).Items() | %%{Remove-Item $_.Path -Recurse -Confirm:$false"

E sim, ele será atualizado no Explorer.

0
Your Sister