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


80

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


2
휴지통의 최대 크기에 도달하면 난 그냥 Windows가 자동으로 가장 오래된 파일을 삭제하자 superuser.com/questions/69284/...
마태 복음 잠금

관리자 cmd 프롬프트를 사용하는 추가 단계가 필요하지 않은 방법이 있습니까? 내 계정 만해도 괜찮아, 내 PC에서 하나의 계정 만 사용한다.
user742864

답변:


91

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

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

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

rd /s %systemdrive%\$Recycle.bin

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


17
몇 가지 추가주의 사항 : 휴지통 상태의 변경 사항은 실제로 휴지통을 열거 나 바탕 화면을 새로 고칠 때까지 탐색기 (바탕 화면 아이콘)에 반영되지 않을 수 있습니다. 특정 볼륨에만 영향을줍니다. 다른 드라이브에있는 재활용 된 파일은 영향을받지 않으므로이 방법 으로 실제로 휴지통을 비우지 않을 수 있습니다. 디렉토리 이름은 Windows 버전에 따라 다를 수 있습니다 (파일 시스템도 마찬가지라고 생각합니다). 그것은있을 수 있습니다 $Recycle.bin, Recycled, Recycler, 등을 노턴 복구 함이 마음에 멀티 부팅 프로그램이 자신의 디렉토리에있는 경우에 당신은 더 이상있을 수 있습니다.
Synetech

1
@Synetech, 우리가 어떻게 알아낼 않는 $Recycle.bin, Recycled또는를 Recycler? 이를 수행하는 변수가 있습니까? 아니면 예외를 잡는 유일한 방법입니까?
Pacerier

3
참고 : 스크립트에서 이것을 사용 하는 경우 추가 프롬프트를 제공하지 않도록 /q스위치도 전달해야 rd합니다. rd /s /q %SYSTEMDRIVE%\$Recycle.bin
James Ko

내 Windows 10에서 작동하지 않습니다.이 명령을 사용한 후 아무 일도 일어나지 않습니다.
jdhao

1
CMD에서만 작동합니다. powershell에서 실행하려면 다음을 시도하십시오 cmd /c "rd /s %systemdrive%\$Recycle.bin"
Arcsector

29

내가 선호 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"

Synetech이 언급 한 것과 동일한 문제가 있지 않습니까? stackoverflow.com/questions/9238953/…
Pacerier 2015-04-25

1
@Pacerier 바탕 화면에 휴지통을 표시하지 않기 때문에 아이콘이 업데이트되는지 여부를 전에는 알지 못했습니다. 테스트 한 후 recycle.exe를 통해 비운 후 아이콘 올바르게 업데이트됩니다. 디렉토리에 관한 한, Win32 API를 사용하여 휴지통을 비울 것으로 예상합니다. 그러나 XP, 7, 8, 8.1 및 Server 2003, 2012, 2012 R2를 포함한 Windows에서 수년 동안이 유틸리티를 사용했습니다. (아마도 Vista 및 Server 2008에서 사용했지만 해당 OS를 오래 실행하지 않았기 때문에 확실히 말할 수는 없습니다.)
kodybrown

1
예, 특히 이미 내장 된 방법이 있기 때문에 특히 유용한 도구는 아닙니다.
Pacerier

2
@Pacerier는 방식으로 구축되었습니다!? 키보드 및 / 또는 마우스로 Windows 탐색기를 탐색하는 것처럼? 바탕 화면의 아이콘을 사용합니까 (휴지통이 바탕 화면에도 표시된다고 가정)? 어느 쪽도 작전의 질문을 해결하지 못합니다. 나는 기록을 삭제하는 것과 같은 빈을 비우는 명령이 어딘가에 있다고 생각 RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1하지만 찾지 못했습니다. 그러니 내장 된 방법이 있다면 공유 해주세요!
kodybrown

1
@Pacerier : 먼저이 RD /S [/Q]솔루션에 @wasatchwizard가 테스트를 통해 반박 한 솔루션 과 같은 결함이 있음 을 제안한 다음 똑같은 RD /S [/Q]솔루션이 "내장"되어 있기 때문에 갑자기 우수합니다. 그게 어떻게 말이 되죠? RD /S [/Q]@Synetech가 설명한 문제가 있습니다. 이 솔루션은 그렇지 않습니다.
zb226


11

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. 공식 문서는 여기 에서 찾을 수 있습니다 .


3
Clear RecycleBin은 Windows 10의 PowerShell에서 유용합니다
Jin

Clear-RecycleBin휴지통에서 제거 할 수없는 일부 잘못된 폴더 이름을 성공적으로 삭제했습니다.
S. Tarık Çetin

5

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

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

5

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

파일 시스템에서 모든 파일과 폴더를 조잡하게 삭제하는 대신 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

배치 / 파워 쉘 키메라 기술 (+1)이 매우 훌륭하게 개선되었습니다. 는 iex아이디어를 -ing? (BTW는 EXE를 컴파일 할 필요없이 msbuild를 인라인 작업에 배치 파일에 포함 된 C # 코드로 가능)
npocmaka

@npocmaka 감사합니다! 다른 많은 사람들이 iex이런 식으로 사용했다고 생각 합니다. 내가 그 집어 어디 잊지 ${%~f0}동일합니다 gc "%~f0". 나를 변신시킨 것은 이 고양이 였다 out-string. msbuild를 사용하여 배치 스크립트에 C #을 포함하는 예제를 연결할 수 있습니까? 내 Google-fu는 오늘 약합니다.
rojo

1
여기 - dostips.com/forum/... - 직접 명령 줄 인수를 전달할 수 없지만 - 나중에는 C # 부분에서 추출 할 수있는 인수의 변수를 정의해야합니다
npocmaka

위의 예에서 .net 버전은 매개 변수화되지 않습니다.
npocmaka

4

동안

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

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

rd / s /qd:\$RECYCLE.BIN

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


위의 제안 된 명령이 작동하지 않는 이유를 알아 내려고 노력했습니다. f를 지정하면 내 것이 작동했습니다. 감사합니다! <3
Phill

4

이 powershell oneliner를 사용합니다.

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

C :와 다른 드라이브에서도 작동합니다.


3

휴지통을 비우기 위해 배치 파일에서 다음 명령을 사용합니다.

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

2

예, 다음 코드를 사용하여 배치 파일을 만들 수 있습니다.

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

이것은 기본적으로 \ Desktop 디렉터리에서 휴지통을 비운 다음 실행하는 powershell 스크립트를 생성합니다.


0

모든 답변이 너무 복잡합니다. OP는 CMD에서이를 수행하는 방법을 요청했습니다.

여기에 있습니다 (cmd 파일에서) :

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

그리고 네, 탐색기에서 업데이트됩니다.


0

다음 줄로 cmd 파일을 만듭니다.

for %%p in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%p:\$Recycle.Bin" rundll32.exe advpack.dll,DelNodeRunDLL32 "%%p:\$Recycle.Bin"

0

이 PowerShell 명령을 사용할 수 있습니다.

Clear-RecycleBin -Force

참고 : 확인 프롬프트가 필요한 경우 -Force 플래그를 제거하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.