일반적으로 휴지통 내용을 마우스 오른쪽 버튼으로 클릭하고 "휴지통 비우기"를 선택하여 삭제합니다. 하지만 명령 프롬프트를 사용하여 휴지통 내용을 삭제해야하는 요구 사항이 있습니다. 이것이 가능한가? 그렇다면 어떻게 할 수 있습니까?
일반적으로 휴지통 내용을 마우스 오른쪽 버튼으로 클릭하고 "휴지통 비우기"를 선택하여 삭제합니다. 하지만 명령 프롬프트를 사용하여 휴지통 내용을 삭제해야하는 요구 사항이 있습니다. 이것이 가능한가? 그렇다면 어떻게 할 수 있습니까?
답변:
시스템 파일이 포함 된 드라이브에서 휴지통 디렉터리를 영구적으로 삭제하여 명령 줄에서 휴지통을 효과적으로 "비울"수 있습니다. (대부분의 경우 이것이 C:
드라이브이지만 항상 참이 아니므로 해당 값을 하드 코딩해서는 안됩니다. 대신%systemdrive%
환경 변수를 .)
이 방법이 작동하는 이유는 각 드라이브에라는 이름의 숨겨진 보호 된 폴더가 있기 때문입니다.이 폴더에는 $Recycle.bin
실제로 휴지통에 삭제 된 파일과 폴더가 저장됩니다. 이 디렉터리가 삭제되면 Windows는 자동으로 새 디렉터리를 만듭니다.
따라서 디렉터리를 제거하려면 매개 변수 와 함께 rd
( r emove d irectory) 명령을 사용합니다 /s
. 이는 지정된 디렉터리 내의 모든 파일과 디렉터리도 제거되어야 함을 나타냅니다.
rd /s %systemdrive%\$Recycle.bin
이 작업은 모든 사용자 계정에서 현재 휴지통에있는 모든 파일과 폴더를 영구적으로 삭제 합니다 . 또한이 작업을 수행 할 수있는 충분한 권한을 가지려면 상승 된 명령 프롬프트에서 명령을 실행해야합니다.
$Recycle.bin
, Recycled
, Recycler
, 등을 노턴 복구 함이 마음에 멀티 부팅 프로그램이 자신의 디렉토리에있는 경우에 당신은 더 이상있을 수 있습니다.
$Recycle.bin
, Recycled
또는를 Recycler
? 이를 수행하는 변수가 있습니까? 아니면 예외를 잡는 유일한 방법입니까?
/q
스위치도 전달해야 rd
합니다. rd /s /q %SYSTEMDRIVE%\$Recycle.bin
cmd /c "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"
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
하지만 찾지 못했습니다. 그러니 내장 된 방법이 있다면 공유 해주세요!
RD /S [/Q]
솔루션에 @wasatchwizard가 테스트를 통해 반박 한 솔루션 과 같은 결함이 있음 을 제안한 다음 똑같은 RD /S [/Q]
솔루션이 "내장"되어 있기 때문에 갑자기 우수합니다. 그게 어떻게 말이 되죠? RD /S [/Q]
@Synetech가 설명한 문제가 있습니다. 이 솔루션은 그렇지 않습니다.
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
. 공식 문서는 여기 에서 찾을 수 있습니다 .
Clear-RecycleBin
휴지통에서 제거 할 수없는 일부 잘못된 폴더 이름을 성공적으로 삭제했습니다.
파티에 조금 늦었다는 건 알지만 주관적으로 좀 더 우아한 해결책에 기여할 수있을 거라 생각 했어요.
파일 시스템에서 모든 파일과 폴더를 조잡하게 삭제하는 대신 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
iex
아이디어를 -ing? (BTW는 EXE를 컴파일 할 필요없이 msbuild를 인라인 작업에 배치 파일에 포함 된 C # 코드로 가능)
동안
rd / s / q % systemdrive % \ $ RECYCLE.BIN
일반적으로 c : 인 시스템 드라이브에서 $ RECYCLE.BIN 폴더를 삭제합니다. 로컬 및 외부 드라이브의 모든 파티션에 숨겨진 $ RECYCLE.BIN 폴더가 있으므로 다른 사용 가능한 파티션에서 삭제하는 것이 좋습니다. $ RECYCLE.BIN 폴더가없는 USB 플래시 드라이브와 같은 이동식 드라이브). 예를 들어, d :에 프로그램을 설치했습니다. 휴지통으로 이동 한 파일을 삭제하려면 다음을 실행해야합니다.
rd / s /qd:\$RECYCLE.BIN
추가 정보 는 명령 줄에서 휴지통 비우기의 수퍼 유저에서 확인할 수 있습니다.
예, 다음 코드를 사용하여 배치 파일을 만들 수 있습니다.
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 스크립트를 생성합니다.