Zwykle usuwamy zawartość kosza, klikając go prawym przyciskiem myszy i wybierając opcję „Opróżnij kosz”. Ale mam wymaganie, w którym muszę usunąć zawartość kosza za pomocą wiersza polecenia. czy to możliwe? Jeśli tak, jak mogę to osiągnąć?
windows
windows-7
command-line
batch-file
recycle-bin
user1016403
źródło
źródło
Odpowiedzi:
Możesz skutecznie „opróżnić” Kosz z wiersza poleceń, trwale usuwając katalog Kosza na dysku zawierającym pliki systemowe. (W większości przypadków będzie to
C:
dysk, ale nie należy zakodować tej wartości na stałe, ponieważ nie zawsze będzie to prawda. Zamiast tego użyj%systemdrive%
zmiennej środowiskowej).Powodem, dla którego ta taktyka działa, jest to, że każdy dysk ma ukryty, chroniony folder o nazwie
$Recycle.bin
, w którym Kosz faktycznie przechowuje usunięte pliki i foldery. Po usunięciu tego katalogu system Windows automatycznie tworzy nowy katalog.Aby więc usunąć katalog, użyj
rd
polecenia ( r emove d irectory) z/s
parametrem, który wskazuje, że wszystkie pliki i katalogi w określonym katalogu również powinny zostać usunięte:Zwróć uwagę, że ta czynność spowoduje trwałe usunięcie wszystkich plików i folderów znajdujących się obecnie w Koszu ze wszystkich kont użytkowników . Ponadto (oczywiście) będziesz musiał uruchomić polecenie z wiersza polecenia z podwyższonym poziomem uprawnień, aby mieć wystarczające uprawnienia do wykonania tej czynności.
źródło
$Recycle.bin
,Recycled
,Recycler
, itd., A może nawet więcej niż jeden, jeśli multi-boot-programy takie jak Norton Recovery Bin mają własne katalogi.$Recycle.bin
,Recycled
alboRecycler
? Czy istnieje zmienna, która to robi, czy jest to jedyny sposób na wyłapywanie wyjątków?/q
przełącznik, więcrd
nie wyświetla dodatkowego monitu.rd /s /q %SYSTEMDRIVE%\$Recycle.bin
cmd /c "rd /s %systemdrive%\$Recycle.bin"
Wolę
recycle.exe
od Franka P. Westlake'a . Zapewnia dobry stan przed i po. (Używam różnych narzędzi Franka od ponad dziesięciu lat ...)Ma również wiele innych zastosowań i opcji (wymienione dane wyjściowe pochodzą z /?).
źródło
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
ale go nie znalazłem. Więc proszę, jeśli masz wbudowany sposób, udostępnij go!RD /S [/Q]
rozwiązanie - które @wasatchwizard obalił testując - potem dokładnie to samoRD /S [/Q]
rozwiązanie nagle staje się lepsze, ponieważ jest „wbudowane”. W jaki sposób to ma sens?RD /S [/Q]
ma problemy opisane przez @Synetech. To rozwiązanie nie.nircmd pozwala to zrobić, wpisując
http://www.nirsoft.net/utils/nircmd-x64.zip
http://www.nirsoft.net/utils/nircmd.html
źródło
Możesz użyć skryptu PowerShell (działa to również w przypadku użytkowników z przekierowaniem folderu, aby ich kosze na śmieci nie zajmowały miejsca na serwerze)
Powyższy skrypt pochodzi z tego miejsca .
Jeśli masz Windows 10 i PowerShell 5, jest
Clear-RecycleBin
Commandlet .Aby używać
Clear-RecycleBin
wewnątrz programu PowerShell bez potwierdzenia, możesz użyćClear-RecycleBin -Force
. Oficjalną dokumentację można znaleźć tutajźródło
Clear-RecycleBin
pomyślnie usunąłem niektóre źle sformułowane nazwy folderów z kosza, których nie mogłem usunąć w inny sposób.Aby potajemnie usunąć wszystko, spróbuj:
źródło
Wiem, że trochę się spóźniłem na przyjęcie, ale pomyślałem, że mogę wnieść swój subiektywnie bardziej wdzięczne rozwiązanie.
Szukałem skryptu, który opróżniłby Kosz za pomocą wywołania API, zamiast brutalnie usuwać wszystkie pliki i foldery z systemu plików. Po niepowodzeniu w moich próbach
RecycleBinObject.InvokeVerb("Empty Recycle &Bin")
(które najwyraźniej działają tylko w XP lub starszych), natknąłem się na dyskusje o użyciu funkcji osadzonej w shell32.dll wywołanejSHEmptyRecycleBin()
z języka kompilowanego. Pomyślałem, hej, mogę to zrobić w PowerShell i owinąć to w hybrydę skryptów wsadowych.Zapisz to z rozszerzeniem .bat i uruchom, aby opróżnić Kosz. Uruchom go
/y
przełącznikiem, aby pominąć potwierdzenie.<# : 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
Oto bardziej złożona wersja, która najpierw wywołuje,
SHQueryRecycleBin()
aby określić, czy pojemnik jest już pusty przed wywołaniemSHEmptyRecycleBin()
. W tym przypadku pozbyłem sięchoice
potwierdzenia i/y
przełącznika.<# : 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
źródło
iex
-ing to twój pomysł? (btw jest to możliwe do osadzenia kodu C # w pliku wsadowego z zadań msbuild inline bez konieczności sporządzania EXE)iex
tego sposobu. Zapomniałem, gdzie odebrałem, to${%~f0}
jest równoważnegc "%~f0"
. To ten kot zmienił mnie wout-string
. Czy możesz połączyć przykład osadzania C # w skrypcie wsadowym za pomocą msbuild? Mój Google-fu jest dziś słaby.podczas
usunie folder $ RECYCLE.BIN z dysku systemowego, którym zwykle jest c :, należy rozważyć usunięcie go z innych dostępnych partycji, ponieważ na każdej partycji na dyskach lokalnych i zewnętrznych (ale nie na dyski wymienne, takie jak pendrive'y, które nie mają folderu $ RECYCLE.BIN). Na przykład zainstalowałem program w d :, aby usunąć pliki, które przeniósł się do Kosza, powinienem uruchomić:
Więcej informacji można znaleźć w Super User pod adresem Empty recycling bin z wiersza poleceń
źródło
Używam tego onelinera PowerShell:
Działa również na innych dyskach niż C :.
źródło
Używam tych poleceń w pliku wsadowym, aby opróżnić kosz:
źródło
Tak, możesz utworzyć plik wsadowy za pomocą następującego kodu:
Zasadniczo tworzy to skrypt PowerShell, który opróżnia kosz w katalogu \ Desktop, a następnie go uruchamia.
źródło
Wszystkie odpowiedzi są zbyt skomplikowane. OP poprosił CMD o możliwość zrobienia tego.
Proszę bardzo (z pliku cmd):
I tak, zaktualizuje się w eksploratorze.
źródło
Utwórz plik cmd z linią:
źródło
Możesz użyć tego polecenia programu PowerShell.
Uwaga : jeśli chcesz otrzymać monit o potwierdzenie, usuń flagę -Force
źródło