Обычно мы удаляем содержимое корзины, щелкнув ее правой кнопкой мыши и выбрав "Empty Recycle Bin". Но у меня есть требование, когда мне нужно удалить содержимое корзины с помощью командной строки. Это возможно? Если да, то как я могу это достичь?
Как очистить recyclebin через командную строку?
Ответ 1
Вы можете эффективно "пустить" корзину из командной строки, постоянно удаляя каталог корзины на диске, который содержит системные файлы. (В большинстве случаев это будет диск C:
, но вы не должны указывать это значение, потому что оно не всегда будет истинным. Вместо этого используйте переменную среды %systemdrive%
.)
Причина, по которой эта тактика работает, состоит в том, что каждый диск имеет скрытую защищенную папку с именем $Recycle.bin
, где корзина фактически хранит удаленные файлы и папки. Когда этот каталог будет удален, Windows автоматически создаст новый каталог.
Итак, чтобы удалить каталог, используйте команду rd
(r emove d-directory) с параметром /s
, которая указывает, что все файлы и каталоги в указанном каталоге также должны быть удалены:
rd /s %systemdrive%\$Recycle.bin
Обратите внимание, что это действие навсегда удалит все файлы и папки, находящиеся в корзине , из всех учетных записей пользователей. Кроме того, вам (очевидно) придется выполнить команду из командной строки с повышенными правами, чтобы иметь достаточные привилегии для выполнения этого действия.
Ответ 2
Я предпочитаю recycle.exe
из Frank P. Westlake. Он обеспечивает приятный статус до и после. (Я использую специальные утилиты Frank для более десяти лет.)
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"
Ответ 3
Nircmd позволяет вам сделать это, набрав
nircmd.exe emptybin
http://www.nirsoft.net/utils/nircmd-x64.zip
http://www.nirsoft.net/utils/nircmd.html
Ответ 4
Вы можете использовать скрипт 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
. Официальную документацию можно найти здесь
Ответ 5
а
rd/s/q% systemdrive%\$RECYCLE.BIN
удалит папку $RECYCLE.BIN с системного диска, которая обычно c:, следует удалить его из любых других доступных разделов, так как есть скрытая папка $RECYCLE.BIN в любом разделе на локальных и внешних дисках (но не на съемных дисках, например, на USB-накопителе, у которых нет папки $RECYCLE.BIN). Например, я установил программу в d:, чтобы удалить файлы, которые она переместила в Корзину, которую я должен запустить:
rd/s/q d:\$RECYCLE.BIN
Дополнительная информация доступна в Super User по адресу Очистить корзину из командной строки
Ответ 6
Чтобы украдкой удалить все, попробуйте:
rd /s /q %systemdrive%\$Recycle.bin
Ответ 7
Я использую эти команды в пакетном файле для очистки корзины:
del /q /s %systemdrive%\$Recycle.bin\*
for /d %%x in (%systemdrive%\$Recycle.bin\*) do @rd /s /q "%%x"
Ответ 8
Я знаю, что немного опаздываю на вечеринку, но я подумал, что могу внести свой субъективный более грациозный вариант.
Я искал script, который очистил бы корзину с вызовом API, вместо того, чтобы грубо удалять все файлы и папки из файловой системы. Провалившись в моих попытках RecycleBinObject.InvokeVerb("Empty Recycle &Bin")
(который, по-видимому, работает только в XP или старше), я наткнулся на обсуждения использования функции, встроенной в shell32.dll под названием SHEmptyRecycleBin()
скомпилированного языка. Я думал, эй, я могу сделать это в PowerShell и обернуть его в пакетный гибрид script.
Сохраните это с расширением .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
Ответ 9
Я использую эту силовую оболочку oneliner:
gci C:\`$recycle.bin -force | remove-item -recurse -force
Работает для разных дисков, кроме C:, тоже
Ответ 10
Да, вы можете сделать пакетный файл со следующим кодом:
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
Это в основном создает скрипт powershell, который очищает корзину в каталоге \Desktop, а затем запускает ее.
Ответ 11
Все ответы слишком сложны. ОП запросил способ сделать это из CMD.
Вот, пожалуйста (из файла cmd):
powershell.exe /c "$(New-Object -ComObject Shell.Application).NameSpace(0xA).Items() | %%{Remove-Item $_.Path -Recurse -Confirm:$false"
И да, он будет обновляться в проводнике.