Usuń wszystkie pliki z folderu i jego podfolderów


52

Chcę usunąć wszystkie pliki ze struktury folderów, więc mam pustą strukturę folderów.

Czy można to osiągnąć za pomocą skryptów wsadowych lub skryptów VBScript ?

Próbowałem bardzo podstawowej komendy wsadowej, ale wymagało to od użytkownika usunięcia każdego pliku. Nie było to odpowiednie rozwiązanie, ponieważ istnieje wiele setek plików, które z czasem znacznie wzrosną.

Co możesz zasugerować


Masz na myśli usunięcie rekurencyjne? Rzeczywiście można to zrobić. Coś takiego rd /s /q "c:\folder awykona rekurencyjne usuwanie wszystkich plików i folderów wFolder A
Ramhound 15.04. Kwietnia

Mógłbym zrobić, nie wiem jak pisać w PowerShell, ale miałem wcześniej uruchomione skrypty PowerShell.
BobJim

2
Teraz jest idealny czas na naukę. Chciałbym zbadać składnię wsadową i vbs dla starszych celów, ale poświęcić więcej czasu na naukę PS.
MDMoore313

Nie miałem jeszcze okazji sprawdzić kodu, chociaż jestem pewien, że zadziała. Wrócę i wybiorę najbardziej odpowiednią odpowiedź na moje pierwsze zapytanie.
BobJim

Popieram zalecenie @ BigHomie - właśnie nauczyłem się PowerShell i muszę powiedzieć, że jest całkiem fajny - niezbyt twardy, dobra broń w arsenale każdego programisty. Używam go teraz dość często.
Ben,

Odpowiedzi:


75

Można to osiągnąć za pomocą programu PowerShell :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

To polecenie pobiera każdy element podrzędny $path, wykonuje na każdym z nich metodę usuwania i jest dość szybkie. Struktura folderów pozostaje nienaruszona.

Jeśli możesz mieć pliki bez rozszerzenia, użyj

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

zamiast.

Wygląda na to, że -Fileparametr mógł zostać dodany po PowerShell v2. Jeśli tak jest w takim przypadku

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

To powinno załatwić sprawę w przypadku plików z rozszerzeniem.

Jeśli to nie działa, sprawdź, czy masz aktualną wersję programu PowerShell


1
To -Include *.*nie jest -Include .duża różnica! :-)
MDMoore313

Get-ChildItem -Path D: \ EmptyThisFolder -Include . -File -Recurse | foreach {$ _. Delete ()}
BobJim

Dlaczego używasz -Include .? Na tym polega problem.
MDMoore313,

2
Czy nie mogą wdrożyć powershell --version? Czy nie mogą używać numeru wersji z cyframi dodatnimi? To jest po prostu szalone. Ponad 1300 głosów pozytywnych na pytanie, jak znaleźć numer wersji programu?
Thomas Weller,

1
@demonicdaron nie powinien; Pytanie OP dotyczyło zachowania struktury folderów.
MDMoore313,

25

Krótki i pakiet PowerShell. Nie jestem pewien, z jaką najniższą wersją PS będzie współpracować.

Remove-Item c:\Tmp\* -Recurse -Force

2
Miło i łatwo. To załatwiło sprawę, a zaakceptowana odpowiedź nie!
demonicdaron

To powinna być zaakceptowana odpowiedź, możesz nawet po prostu wpisać, rm *ponieważ tak naprawdę nie jest zalecane wymuszanie (okno dialogowe potwierdzenia ma opcję „Tak dla wszystkich”).
J Garcia

22

Możesz to zrobić za pomocą delpolecenia:

dir C:\folder
del /S *

/SPrzełącznik jest usunięcie tylko pliki rekurencyjnie.


2
Czy to tylko usunie pliki, ale opuści foldery?
BobJim

5
Tak. Możesz dodać /Popcję, aby poprosić o potwierdzenie każdego usunięcia, aby to sprawdzić.
phoops

dzięki, niech spróbuje! mam nadzieję, że zaoszczędzi mnóstwo czasu!
BobJim

3
Tak. Aby usunąć ukryte i systemowe pliki, wykonaj to attrib -s -r -h Folder\*.* /s /dprzed usunięciem. Aby uzyskać uprawnienia, użyj takeownpolecenia.
Jet

2
I możesz użyć / Q, aby NIE prosić o potwierdzenie podczas używania symboli wieloznacznych.
Aylatan

4

Czytając między wierszami twojego pierwotnego pytania, mogę zaoferować alternatywną linię kodu BATCH, której możesz użyć. Po uruchomieniu uruchomione zostaną tylko te pliki, które mają ponad 60 dni. W ten sposób możesz umieścić to w zaplanowanym zadaniu, a po uruchomieniu usuwa niepotrzebne pliki zamiast wysadzać cały katalog. Możesz zmienić od 60 do 5 dni, a nawet 1 dzień, jeśli chcesz. To nie usuwa folderów.

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

Dzięki za pomysł, ale obecnie myślę, że proces „opróżniania” zostanie zakończony w bardzo nieplanowanym terminie adhoc. Zachowam ten kod na przyszłość! Pozdrawiam
BobJim

Tytuł brzmi „Usuń wszystkie pliki z folderu i jego podfolderów”, więc nie jest to rozwiązanie.
Anders Lindén,


3

Użyj programu PowerShell, aby usunąć pojedynczy plik lub folder. Przed wykonaniem polecenia Usuń w programie PowerShell musimy upewnić się, że jesteś zalogowany na serwerze lub komputerze za pomocą konta, które ma pełny dostęp do obiektów, które chcesz usunąć.

Z przykładem: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

Użycie komend PowerShell do usunięcia pliku

Remove-Item -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

Powyższe polecenie wykona i usunie plik „DummyfiletoDelete.txt” znajdujący się w lokalizacji „C: \ dotnet-helpers”.

Używanie komend PowerShell do usuwania wszystkich plików

Remove-Item -Path "C: \ dotnet-helpers *. *"

Używanie komend PowerShell do usuwania wszystkich plików i folderów

Remove-Item -Path "C: \ dotnet-helpers *. *" -Recurse

-recursedrąży i znajduje o wiele więcej plików. Ten –recurseparametr pozwoli PowerShellowi usunąć wszelkie elementy potomne bez pytania o zgodę. Dodatkowo można dodać parametr –force, aby usunąć pliki ukryte lub tylko do odczytu.

Używanie polecenia -Force do wymuszonego usuwania plików

Za pomocą polecenia PowerShell, aby wymusić usunięcie wszystkich plików

Remove-Item -Path "C: \ dotnet-helpers *. *" -Force


1

Wypróbuj za pomocą PowerShell. W tym przykładzie chcę usunąć wszystkie pliki .class:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. W Eksploratorze Windows wybierz katalog główny zawierający wszystkie pliki i foldery.

  2. Szukać *

  3. Sortuj według typu (wszystkie foldery będą na górze, a wszystkie pliki wymienione poniżej)

  4. Wybierz wszystkie pliki i naciśnij klawisz Delete.

Spowoduje to usunięcie wszystkich plików i zachowanie struktury katalogów.


1

Usuń wszystkie pliki z bieżącego katalogu i podkatalogów, ale pozostawiając strukturę folderów.

( /Q) służy do pytania użytkownika, czy jest w porządku, aby go usunąć

Uwaga : wypróbuj to bez /Qupewnienia się, że nie usuwasz niczego cennego.

del /S * /Q 

1

To najprostszy sposób IMO

Otwórz PowerShell, przejdź do katalogu ( cd), NASTĘPNIE

ls -Recurse * | rm

(Poof) wszystko zniknęło ...

Jeśli chcesz usunąć na podstawie określonego rozszerzenia

ls -Recurse *.docx | rm

ls wyświetla katalog

-Recurse jest flagą informującą PowerShell do przechodzenia do dowolnych podkatalogów

* mówi wszystko

*.doc wszystko z rozszerzeniem .doc

| podaj dane wyjściowe od lewej do prawej

rm kasować

Wszystkie pozostałe odpowiedzi sprawiają, że jest to bardziej mylące niż to konieczne.


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

Jako uzupełnienie powyższych odpowiedzi, w rzeczywistości nie ma potrzeby używania Get-Childitem i przekazywania wyniku do potoku w powyższych odpowiedziach, ponieważ słowo kluczowe -Include jest zawarte w poleceniu Remove-Item

Można po prostu:

Remove-Item -Include " . " "C: \ Temp" -Recurse

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.