2009-10-01 10 views
47

Używam Windows.Jak usunąć wszystkie pliki i foldery w folderze przez cmd call

Chcę usunąć wszystkie pliki i foldery w folderze przez wywołanie systemowe.

mogę nazwać tak:

>rd /s /q c:\destination 
>md c:\destination 

Wiesz łatwiejszy sposób?

+0

http://superuser.com/questions/173859/how-can-i-delete-all-files-subfolders-in-a-given-folder-via-the-command-prompt –

+0

Możliwy duplikat [Co się stało z deltree i co jest jego zamiennikiem?] (Http://stackoverflow.com/questions/338895/what-ever-happened-to-deltree-and-whats-its-replacement) –

Odpowiedz

86

Nie, nie znam jednego.

Jeśli chcesz zachować oryginalny katalog z jakiegoś powodu, a zamiast tego naprawdę chcą go opróżnić, a następnie można wykonać następujące czynności (ACL, & c.):

del /q destination\* 
for /d %x in (destination\*) do @rd /s /q "%x" 

To pierwsze usuwa wszystkie pliki z katalogu, a następnie rekurencyjnie usuwa wszystkie zagnieżdżone katalogi, ale ogólnie zachowuje katalog najwyższego poziomu, jaki jest (z wyjątkiem jego zawartości).

Zauważ, że w pliku wsadowym trzeba podwoić % wewnątrz pętli for:

del /q destination\* 
for /d %%x in (destination\*) do @rd /s /q "%%x" 
+2

it's sposób to zrobić –

+3

Byłem w stanie to zrobić bez pliku wsadowego. użyj znaku &&, aby połączyć dwie operacje: –

+1

Jestem kompletnym noobem powłoki okna: jak ustawić miejsce docelowe do ścieżki za pomocą tego przykładu? –

18

del c:\destination\*.* /s /q pracował dla mnie. Mam nadzieję, że to też działa dla ciebie.

+7

Usuwa wszystkie pliki, ale nie foldery. – Eric

+1

Udało mi się przejść do folderu. (Przesuń prawy przycisk myszy, wybierz polecenie "otwórz cmd"), następnie "del *. *' –

8

Jeśli w nazwach podfolderów mogą znajdować się spacje, należy je ująć w ukryte cudzysłowy. Poniższy przykład pokazuje to dla poleceń używanych w pliku wsadowym.

set targetdir=c:\example 
del /q %targetdir%\* 
for /d %%x in (%targetdir%\*) do @rd /s /q ^"%%x^" 
1

Prostym rozwiązaniem jedna linia jest stworzenie pusty katalog gdzieś w systemie plików, a następnie użyj ROBOCOPY (http://technet.microsoft.com/en-us/library/cc733145.aspx) z przełącznikiem /MIR usunąć wszystkie pliki i podfoldery. Domyślnie robocopy nie kopiuje zabezpieczeń, więc listy ACL w folderze głównym powinny pozostać nienaruszone.

Prawdopodobnie również chcesz ustawić wartość przełącznika ponownych prób, /r, ponieważ domyślna liczba ponownych prób wynosi 1 milion.

robocopy "C:\DoNotDelete_UsedByScripts\EmptyFolder" "c:\temp\MyDirectoryToEmpty" /MIR /r:3 
0

Miałem folder indeksu z 33 folderami, które wymagały usunięcia wszystkich plików i podfolderów. Otworzyłem wiersz polecenia w folderze indeksu, a następnie wykorzystywane te polecenia:

for /d in (*) do rd /s /q "%a" & (
md "%a") 

I oddzielić je na dwie linie (naciśnij enter po pierwszej linii, a gdy poprosił o więcej dodać drugi wiersz), ponieważ jeśli wszedł na pojedynczym linia ta może nie działać. To polecenie usunie każdy katalog, a następnie utworzy nowy, który jest pusty, usuwając wszystkie pliki i podfoldery z oryginalnego katalogu.

15

Myślę, że najprostszym sposobem na to jest:

rmdir /s /q "C:\FolderToNotToDelete\" 

Ostatnim „\” w ścieżce jest ważną częścią.

+15

Powoduje to również usunięcie samego folderu. – Archie

+0

Idealne, to jest to, czego potrzebuję :) – gNerb

+0

Czy działa to rekursywnie, jaka ścieżka jest zbyt długa? – eomeroff

1

Aby usunąć plik:

del PATH_TO_FILE 

Aby usunąć katalog ze wszystkimi plikami w nim:

rmdir /s /q PATH_TO_FOLDER 

Aby usunąć wszystkie pliki z określonego folderu (folder nie usuwając sama) jest nieco skomplikowana. del /s *.* nie można usunąć folderów, ale usuwa pliki ze wszystkich podfolderów. Więc potrzebne są dwie komendy:

del /q PATH_TO_FOLDER\*.* 
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i" 

Można utworzyć skrypt, aby usunąć cokolwiek chcesz (folder lub plik), tak jak to mydel.bat:

@echo off 
setlocal enableextensions 

if "%~1"=="" (
    echo Usage: %0 path 
    exit /b 1 
) 

:: check whether it is folder or file 
set ISDIR=0 
set ATTR=%~a1 
set DIRATTR=%ATTR:~0,1% 
if /i "%DIRATTR%"=="d" set ISDIR=1 

:: Delete folder or file 
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1") 
exit /b %ERRORLEVEL% 

kilka przykładów użycia:

mydel.bat "path\to\folder with spaces" 
mydel.bat path\to\file_or_folder 
4

Tak! Wykorzystanie PowerShell:

powershell -Command "Remove-Item 'c:\destination\*' -Recurse -Force" 
Powiązane problemy