[windows] 명령 프롬프트를 통해 휴지통을 비우는 방법은 무엇입니까?

일반적으로 휴지통 내용을 마우스 오른쪽 버튼으로 클릭하고 “휴지통 비우기”를 선택하여 삭제합니다. 하지만 명령 프롬프트를 사용하여 휴지통 내용을 삭제해야하는 요구 사항이 있습니다. 이것이 가능한가? 그렇다면 어떻게 할 수 있습니까?



답변

시스템 파일이 포함 된 드라이브에서 휴지통 디렉터리를 영구적으로 삭제하여 명령 줄에서 휴지통을 효과적으로 “비울”수 있습니다. (대부분의 경우 이것이 C:드라이브이지만 항상 참이 아니므로 해당 값을 하드 코딩해서는 안됩니다. 대신%systemdrive% 환경 변수를 .)

이 방법이 작동하는 이유는 각 드라이브에라는 이름의 숨겨진 보호 된 폴더가 있기 때문입니다.이 폴더에는 $Recycle.bin실제로 휴지통에 삭제 된 파일과 폴더가 저장됩니다. 이 디렉터리가 삭제되면 Windows는 자동으로 새 디렉터리를 만듭니다.

따라서 디렉터리를 제거하려면 매개 변수 와 함께 rd( r emove d irectory) 명령을 사용합니다 /s. 이는 지정된 디렉터리 내의 모든 파일과 디렉터리도 제거되어야 함을 나타냅니다.

rd /s %systemdrive%\$Recycle.bin

이 작업은 모든 사용자 계정에서 현재 휴지통에있는 모든 파일과 폴더를 영구적으로 삭제 합니다 . 또한이 작업을 수행 할 수있는 충분한 권한을 가지려면 상승 된 명령 프롬프트에서 명령을 실행해야합니다.


답변

내가 선호 recycle.exe에서 프랭크 P. 웨스트 레이크 . 좋은 전후 상태를 제공합니다. (저는 Frank의 다양한 유틸리티를 10 년 넘게 사용해 왔습니다.)

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.

또한 더 많은 용도와 옵션이 있습니다 (나열된 출력은 /?에서 나옴).

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를 사용하면 다음을 입력하여 수행 할 수 있습니다.

nircmd.exe emptybin

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


답변

powershell 스크립트를 사용할 수 있습니다 (폴더 리디렉션이있는 사용자에게도 작동하며 휴지통이 서버 저장 공간을 차지하지 않도록합니다)

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

위의 스크립트는 여기 에서 가져온 입니다.

Windows 10과 powershell 5가있는 경우 Clear-RecycleBin커맨드 렛이 있습니다.

사용하려면 Clear-RecycleBin확인하지 않고 PowerShell을 내부에, 당신은 사용할 수 있습니다 Clear-RecycleBin -Force. 공식 문서는 여기 에서 찾을 수 있습니다 .


답변

모든 것을 은밀하게 제거하려면 다음을 시도하십시오.

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


답변

파티에 조금 늦었다는 건 알지만 주관적으로 좀 더 우아한 해결책에 기여할 수있을 거라 생각 했어요.

파일 시스템에서 모든 파일과 폴더를 조잡하게 삭제하는 대신 API 호출로 휴지통을 비우는 스크립트를 찾고있었습니다. 내 시도에 실패한 후 RecycleBinObject.InvokeVerb("Empty Recycle &Bin")(분명히 XP 또는 이전 버전에서만 작동 함) SHEmptyRecycleBin()컴파일 된 언어에서 호출 된 shell32.dll에 포함 된 함수를 사용하는 것에 대한 논의를 우연히 발견했습니다 . 나는 PowerShell에서 그것을 할 수 있고 배치 스크립트 하이브리드로 래핑 할 수 있다고 생각했습니다.

.bat 확장자로 저장하고 실행하여 휴지통을 비 웁니다. /y확인을 건너 뛰려면 스위치로 실행하십시오 .

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

다음 SHQueryRecycleBin()은을 호출하기 전에 bin이 이미 비어 있는지 확인하기 위해 먼저 호출하는 더 복잡한 버전입니다 SHEmptyRecycleBin(). 이를 위해 choice확인 및 /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


답변

동안

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

일반적으로 c : 인 시스템 드라이브에서 $ RECYCLE.BIN 폴더를 삭제합니다. 로컬 및 외부 드라이브의 모든 파티션에 숨겨진 $ RECYCLE.BIN 폴더가 있으므로 다른 사용 가능한 파티션에서 삭제하는 것이 좋습니다. $ RECYCLE.BIN 폴더가없는 USB 플래시 드라이브와 같은 이동식 드라이브). 예를 들어, d :에 프로그램을 설치했습니다. 휴지통으로 이동 한 파일을 삭제하려면 다음을 실행해야합니다.

rd / s /qd:\$RECYCLE.BIN

추가 정보 는 명령 줄에서 휴지통 비우기의 수퍼 유저에서 확인할 수 있습니다.